Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以将包含lt或gt运算符的表达式作为模板参数传递?_C++_Templates - Fatal编程技术网

C++ 是否可以将包含lt或gt运算符的表达式作为模板参数传递?

C++ 是否可以将包含lt或gt运算符的表达式作为模板参数传递?,c++,templates,C++,Templates,我认为以下程序格式良好: #include <iostream> template <bool> void foo(){ }; int a = 4; int b = 5; int main(){ foo<a<b>(); } 我这样想的原因是N4296::14.2/3[临时名称]: 名称查找后,3.4会发现名称是模板名称或 运算符函数id或文本运算符id引用一组 重载函数任何成员都是函数模板,如果 然后是一个是,这是可能的,只要表达式是编译时常量表达

我认为以下程序格式良好:

#include <iostream>

template <bool>
void foo(){ };

int a = 4;
int b = 5;
int main(){ foo<a<b>(); }
我这样想的原因是N4296::14.2/3[临时名称]:

名称查找后,3.4会发现名称是模板名称或 运算符函数id或文本运算符id引用一组 重载函数任何成员都是函数模板,如果
然后是一个是,这是可能的,只要表达式是编译时常量表达式


您所需要做的就是将int设置为constexpr。您可能希望在表达式周围添加括号,因为代码编译器的人类读者在解析foo时不会遇到问题=a@ForceBru问题不在于如何修复要工作的代码,而在于理解为什么不能工作,或者只是foo@Wintermute啊。是的,正如许多人现在已经注意到的,这些并不是编译时常量,因此不能用作模板参数。我第一次没注意到。
constexpr int a = 4;
constexpr int b = 5;
int main(){ foo<(a<b)>(); return 0;}
#include <iostream>

template <bool>
void foo(){ };

const int a = 4;
const int b = 5;
int main(){ foo<a<b>();}