std::is_pointer 个取消引用的双指针

std::is_pointer of dereferenced double pointer

我有一些代码想检查 static_assert

中的(意外)双指针
#include<type_traits>


int main()
{
    using namespace std;
    float* arr[10];
    float ** pp;

    static_assert(!is_pointer<decltype(*arr)>::value, "double pointer detected");
    static_assert(!is_pointer<decltype(*pp)>::value, "double pointer detected");

}

我很好奇为什么会这样编译,因为我原以为 static_asserts 会报错。

这两个 decltypes 都解析为引用类型,因此都不是指针,因此静态断言通过了。这些也会通过:

static_assert(std::is_pointer<std::remove_reference_t<decltype(*arr)>>::value);
static_assert(std::is_pointer<std::remove_reference_t<decltype(*pp)>>::value);