Почему шаблон, который принимает значение, не может принимать integral_constant и использует ()() для извлечения значения?

#c

#c

Вопрос:

Вот простой пример:

 #include <type_traits>

using test = std::bool_constant<std::bool_constant<true>()()>;
  

Я бы подумал, что поскольку std::integral_constant::operator() это выражение const , это должно сработать.

Замена ()() с ::value помощью работает, но вопрос не в этом.

Комментарии:

1. Используйте using test = std::bool_constant<std::bool_constant<true>{}()>; . Это std::bool_constant<true>()() функция, которая не принимает параметров и возвращает bool_constant . Если вы хотите вызвать operator() bool_constant , вы должны создать его с помощью {} then call () .

2. @rafix07, о, это интерпретируется как функция, которая возвращает a std::bool_constant<true> и не принимает аргументов? FML!

3. для меня это самый неприятный синтаксический анализ. Попробуйте это .

4. @rafix07, добавьте его в качестве ответа. Я приму это.

5. @Phil1970, и твоя точка зрения …? В примере test это тип, который должен быть равен std::integral_constant<bool, true> .