Рассмотрим этот фрагмент кода:
template < auto What >
constexpr auto Identity = [](auto&&...) { return What; };
struct Ban
{
Ban() = default;
Ban(const Ban& ban) = delete;
Ban( Ban&& ban) = delete;
};
int main()
{
Ban ban;
Identity<false>(10,ban);
return 0;
}
Не удается скомпилировать на godbolt.org с gcc-7.3
, поскольку он пытается скопировать второй аргумент Identity
.Почему это должно?Это ошибка в gcc
?
gcc
не жалуется, если второй аргумент является временным или когда есть только один аргумент.Он жалуется только на один аргумент, когда определение Identity
имеет (...)
вместо (auto&&...)
.