我对非类型模板参数感到困惑,希望有人能够解释一下。
#include <iostream>
template<typename T, int a>
void f() {
if (a == 1) {
std::cout << "Hello\n";
} else {
T("hello");
}
}
int main() {
f<int, 1>;
}
当我编译时,出现错误提示:
/tmp/conditional_templates.cc:13:12: required from here
/tmp/conditional_templates.cc:8:5: error: cast from ‘const char*’ to ‘int’ loses precision [-fpermissive]
T("hello");
^
但是,编译器不能检测到非类型参数"a"为1,因此else分支不会被执行吗?还是这太难了?在这种情况下,我该如何实现类似的功能?
a
代表什么?为什么你需要它? - Nawazelse
条件设置为不可能,而且他想知道为什么编译器不会忽略错误,因为第二个模板参数1
将触发执行if
语句而不是else
语句。 - chrisb2244