#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>
.