为什么我不能将 assert 与 std::is_same 一起使用?
Why can't I use assert with std::is_same?
有人可以向我解释为什么这个代码片段无法正常工作吗?
#include <cassert>
#include <type_traits>
using namespace std;
int main()
{
assert(is_same<int, int>::value);
}
编译失败,因为根据编译器:
prog.cpp:7:33: error: macro "assert" passed 2 arguments, but takes just 1
assert(is_same<int, int>::value);
^
prog.cpp: In function 'int main()':
prog.cpp:7:2: error: 'assert' was not declared in this scope
assert(is_same<int, int>::value);
^
什么? is_same<int, int>::value
无疑是一个的说法。还有assert
是在这个作用域声明的,编译器自己在前面的错误中确认了!
宏将您的参数拆分如下:
is_same<int , int>::value
// ^^ par1 ^^// ^^ par2 ^^
由于assert()
是一个宏定义(只有一个参数),它由C 预处理器处理。预处理器不知道 c++ 语法,例如用 ,
分隔的尖括号 (<>
) 中的模板参数。所以参数表达式被拆分成如上所示。
您可以避免使用额外的括号,因此 C 预处理器将把该参数作为一个整体:
assert((is_same<int, int>::value));
// ^ ^
有人可以向我解释为什么这个代码片段无法正常工作吗?
#include <cassert>
#include <type_traits>
using namespace std;
int main()
{
assert(is_same<int, int>::value);
}
编译失败,因为根据编译器:
prog.cpp:7:33: error: macro "assert" passed 2 arguments, but takes just 1
assert(is_same<int, int>::value);
^
prog.cpp: In function 'int main()':
prog.cpp:7:2: error: 'assert' was not declared in this scope
assert(is_same<int, int>::value);
^
什么? is_same<int, int>::value
无疑是一个的说法。还有assert
是在这个作用域声明的,编译器自己在前面的错误中确认了!
宏将您的参数拆分如下:
is_same<int , int>::value
// ^^ par1 ^^// ^^ par2 ^^
由于assert()
是一个宏定义(只有一个参数),它由C 预处理器处理。预处理器不知道 c++ 语法,例如用 ,
分隔的尖括号 (<>
) 中的模板参数。所以参数表达式被拆分成如上所示。
您可以避免使用额外的括号,因此 C 预处理器将把该参数作为一个整体:
assert((is_same<int, int>::value));
// ^ ^