У меня всегда было впечатление, что типы типа std::is_same
, std::is_void
или std::is_aggregate
должны наследоваться от std::integral_constant
или, более конкретно, от std::bool_constant
.
Однако у агрегатных классов не должно быть базового класса по определению , но когда я использую эти типы как T
в std::is_aggregate_v<T>
, я получаю true
. Очевидно, что они не получены из std::bool_constant
?
Итак, мой вопрос:
Почему std::is_aggregate_v<std::is_aggregate<void>>
верно, по крайней мере, с GCC и Clang? Разве в стандарте не указано, что std::is_aggregate
является производным от std::bool_constant
? Если нет, значит ли это, что значение вышеприведенной строки остается в качестве подробности реализации?