类型何时成为完整类型?下述C++程序是否应被拒绝?
类型何时成为完整类型?
下述C++程序是否应被拒绝?Clang似乎接受它。
template<typename T> concept c = requires { T::n; }; struct z; constexpr bool b(auto...) { return c<z>; } struct z { int n; }; static_assert(not b()); // clang ok, gcc nope, msvc nope
当计算b()时,模板b已被隐式实例化,此时类型z已成为完整类型。但b中的表达式c<z>并不依赖于b的任何模板参数。因此问题的核心在于:c<z>应在模板b定义时解析,还是在实例化时解析?
内容的提问来源于stack exchange,提问作者303
相关产品推荐
相关产品推荐

