Рассмотрите этот фрагмент кода,
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 :: value
, компиляторы должны создать его экземпляр независимо от того факта, что он абсолютно ничего не вносит в вычисление значения test
?
Я хотел бы услышать, а) что требуется стандартом, и б) что на самом деле реализовано различными компиляторами? Приветствуются соответствующие разделы из Стандарта.