Код: Выделить всё
#include
// wraps lvalues by ref and xvalues by move
template
struct wrap {
T obj;
friend consteval auto size(wrap const &) {
return size_;
}
};
// error in gcc, ok in clang:
template
wrap(T && a) -> wrap;
// error in gcc, ok in clang:
template
auto make_wrap(T && a) -> wrap {
return {std::forward(a)};
}
// ok in gcc and clang but requires T to be
// default-constructible:
template
auto make_wrap1(T && a) -> wrap {
return {std::forward(a)};
}
// ok in gcc and clang:
template
auto make_wrap2(T && a) {
return wrap{std::forward(a)};
}
Не существует аргументов для «размера», которые зависят от параметра шаблона,
, поэтому объявление «размер» должно быть доступно [-fpermissive] < /p>
< /blockquote>
. size (t {}) вместо size (a) . Но явно зависит от параметра шаблона t , так что оба должны работать, а Кланг все принимает.
это тогда ошибка в GCC?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... g-in-gcc-o