【发布时间】:2018-09-27 08:06:10
【问题描述】:
考虑这段代码:
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;
}
当它试图复制Identity 的第二个参数时,无法在godbolt.org 和gcc-7.3 上编译。为什么应该?这是gcc 中的错误吗?
gcc 在第二个参数是临时参数或只有一个参数时不会抱怨。当Identity 的定义是(...) 而不是(auto&&...) 时,它只抱怨一个参数。
【问题讨论】:
-
可能确实是个bug,gcc-8和clang愉快的编译了这个。
-
令人惊讶的是,
gcc-8在将(auto&&...)更改为(...)时失败了!
标签: c++ gcc c++17 auto generic-lambda