doc*_*733 1 c++ reference class type-traits c++17
为什么std::is_class是false我测试它的参考?
int main() {
struct foo_struct {
int i1;
int i2;
};
std::cout << std::boolalpha << std::is_class<foo_struct>::value << std::endl; // true
std::cout << std::boolalpha << std::is_class<foo_struct&>::value << std::endl; // falae
}
Run Code Online (Sandbox Code Playgroud)
引用类型和类类型是不同的类型;引用类型本身不是类类型。
按类型分类:
C++ 类型系统由以下类型组成:
...
复合类型(另见std::is_compound):
...
班级类型:
非联合类型(另见std::is_class);
联合类型(另见std::is_union)。
我不确定你的意图,你可能会申请std::remove_reference类型,它为非引用类型提供类型本身。因此,您可以在引用或非引用类型的模板中使用它。
std::cout << std::boolalpha << std::is_class<std::remove_reference_t<foo_struct>>::value << std::endl; // true
std::cout << std::boolalpha << std::is_class<std::remove_reference_t<foo_struct&>>::value << std::endl; // true
Run Code Online (Sandbox Code Playgroud)