Рассмотрим этот фрагмент кода,
template<bool b>
struct other
{
static const bool value = !b;
};
template<bool b>
struct test
{
static const bool value = b || other<b>::value;
};
int main()
{
bool value = test<true>::value;
}
Составляют ли компиляторы other<true>
в ситуациях, подобных выше, когда создание экземпляров кажется совершенно ненужным? Или просто потому, что я написал синтаксис other<b>::value
, компиляторы должны создавать его, независимо от того, что он ничего не делает для вычисления значения test<true>::value
?
Я хотел бы услышать, а) что требуется Стандартом, и б) что фактически реализовано различными компиляторами? Соответствующие разделы из Стандарта будут оценены.