Логика короткого замыкания шаблона c ++ c AND (&&) - PullRequest
1 голос
/ 25 января 2020

Мне сказали, что 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;, компиляция будет успех и результат теста верны.

Что не так с функцией шаблона? и почему это уже определено?

Любой ответ будет оценен по достоинству!

1 Ответ

1 голос
/ 25 января 2020

Шаблон в порядке. Это ошибка в g cc версии 5.4 - 6.1: Ошибка компиляции специализации шаблона . Вы оказались на нижнем краю диапазона версий с ошибками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...