Короткое замыкание при создании экземпляра шаблона?

Рассмотрите этот фрагмент кода,

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 :: value ?

Я хотел бы услышать, а) что требуется стандартом, и б) что на самом деле реализовано различными компиляторами? Приветствуются соответствующие разделы из Стандарта.

12
задан Nawaz 31 January 2011 в 05:09
поделиться