Использование понятий с пакетами параметров нетипового шаблона в логических контекстах

В C++20 я определил концепцию AllIntegralс пакетом параметров нетипового шаблона auto... T_values. Хотя GCC 10.1.0 допускает его использование в некоторых контекстах, он отказывается компилировать его использование в других, особенно в ifутверждение. В связанном сообщении об ошибке говорится , что «AllIntegral» не ограничивает тип .

Мой код выглядит так:

      #include <concepts>
#include <ios>
#include <iostream>

template<auto... T_values>
concept AllIntegral = (std::integral<decltype(T_values)> && ...);

int main()
{
    std::cout << std::boolalpha << AllIntegral<1, 2> << '\n';  // compiles and prints "true"
    if (AllIntegral<1, 2>) std::cout << "true" << '\n';        // does not compile

    std::cout.flush();
}

Это вывод компилятора:

      main.cpp: In function ‘int main()’:
main.cpp:11:9: error: ‘AllIntegral’ does not constrain a type
   11 |     if (AllIntegral<1, 2>) std::cout << "true" << '\n';
      |         ^~~~~~~~~~~~~~~~~
main.cpp:6:9: note: concept defined here
    6 | concept AllIntegral = (std::integral<decltype(T_values)> && ...);

В чем причина этой ошибки? Почему мою концепцию нельзя использовать в логическом контексте?

0 ответов

Другие вопросы по тегам