std::is_class 在引用 class 上是错误的

std::is_class is false on a reference class

当我在参考上测试它时,为什么 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
}

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

作为type classification:

The C++ type system consists of the following types:

我不确定你的意图,你可以在类型上应用 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

LIVE