Рассмотрим этот фрагмент кода,
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
?
Я хотел бы услышать, а) что требуется в стандарте, и б) что фактически реализовано различными компиляторами? Приветствуются соответствующие разделы Стандарта.
other<b>::value
и можно ли его вообще конвертировать вbool
и имеет ли смысл. Для этого необходимо создать экземплярother<b>
. Что, если его тип уступит вызову перегруженногоop||
? Тогда инициализатор будет недействительным. - person Johannes Schaub - litb   schedule 05.01.2011