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);
我有一些代码想检查 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);