#include <type_traits>
template<typename T>
struct IsComplete final
: std::bool_constant<requires{sizeof(T);}>
{};
int main()
{
struct A;
static_assert(!IsComplete<A>::value); // ok
struct A{};
static_assert(IsComplete<A>::value); // error
}
我预期第二个
static_assert
应该为真,因为A现在是一个完整的类型。为什么C++20的requires表达式没有按预期的方式工作?
A
创建了1个新的struct
,并在两种情况下使用。 - mediocrevegetable1template<typename T, int _line>
和IsComplete<A, __LINE__>
。 - Marandilstruct A
的两个声明,我们将得到两种不同的类型,并且两个断言都会通过:https://cppinsights.io/s/f7e69e33 - md2perpeIsComplete
会被实例化两次。链接 - Justin Time - Reinstate Monica