Использование понятий с пакетами параметров нетипового шаблона в логических контекстах
В 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)> && ...);
В чем причина этой ошибки? Почему мою концепцию нельзя использовать в логическом контексте?