Мне сказали, что logi c AND (&&
) в шаблоне не работает, поэтому я хочу использовать специализацию шаблона для его достижения.
My тестовый код выглядит следующим образом:
#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;
, компиляция будет успех и результат теста верны.
Что не так с функцией шаблона? и почему это уже определено?
Любой ответ будет оценен по достоинству!