C++ 模板短路逻辑 AND (&&)
c++ template short circuit logic AND (&&)
有人告诉我模板中的 logic AND (&&
) 不起作用,所以我想使用模板专业化来实现它。
我的测试代码如下:
#include <iostream>
template <bool b1, bool b2>
constexpr static bool andVal = false;
// template specialization
template <bool b2>
constexpr static bool andVal<true, b2> = b2;
int main(int argc, char *argv[]) {
std::cout << andVal<1, 1> << std::endl;
std::cout << andVal<0, 1> << std::endl;
std::cout << andVal<0, 0> << std::endl;
std::cout << andVal<1, 0> << std::endl; // this line will cause compilation error
return 0;
}
但是当我编译代码时,出现了这样的错误:
/tmp/ccaqDdfO.s: Assembler messages:
/tmp/ccaqDdfO.s:369: Error: symbol `_ZL6andVal' is already defined
如果我注释最后一行测试代码std::cout << andVal<1, 1> << std::endl;
,编译成功,测试结果正确。
模板函数有什么问题?为什么它已经被定义了?
任何答复将不胜感激!
模板没问题。这是 gcc 版本 5.4 到 6.1 中的错误:template specialization compile error。您恰好处于有问题的版本范围的底部。
有人告诉我模板中的 logic AND (&&
) 不起作用,所以我想使用模板专业化来实现它。
我的测试代码如下:
#include <iostream>
template <bool b1, bool b2>
constexpr static bool andVal = false;
// template specialization
template <bool b2>
constexpr static bool andVal<true, b2> = b2;
int main(int argc, char *argv[]) {
std::cout << andVal<1, 1> << std::endl;
std::cout << andVal<0, 1> << std::endl;
std::cout << andVal<0, 0> << std::endl;
std::cout << andVal<1, 0> << std::endl; // this line will cause compilation error
return 0;
}
但是当我编译代码时,出现了这样的错误:
/tmp/ccaqDdfO.s: Assembler messages:
/tmp/ccaqDdfO.s:369: Error: symbol `_ZL6andVal' is already defined
如果我注释最后一行测试代码std::cout << andVal<1, 1> << std::endl;
,编译成功,测试结果正确。
模板函数有什么问题?为什么它已经被定义了?
任何答复将不胜感激!
模板没问题。这是 gcc 版本 5.4 到 6.1 中的错误:template specialization compile error。您恰好处于有问题的版本范围的底部。