std::is_class 在引用类上为 false

doc*_*733 1 c++ reference class type-traits c++17

为什么std::is_classfalse我测试它的参考?

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)

son*_*yao 5

引用类型和类类型是不同的类型;引用类型本身不是类类型。

类型分类

C++ 类型系统由以下类型组成:

我不确定你的意图,你可能会申请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)

居住