Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумАртПаттерныАнтипаттерныЗаметкиВопрос-ответКнигорецензииСправочная

6. Простой шаблон

Что будет если попытаться скомпилировать, слинковать и запустить данную программу?
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <int n = 0>
struct test
{
    enum
    {
        value = true ? 0 : test<n - 1>::value
    };
};

int main()
{
    int x = test<>::value;

    return 0;
}
Компилировать в Comeau
Ответить на вопрос вам поможет понимание того, как происходит развертка шаблонов. Вот что произойдет.
Произойдет ошибка компиляции. Несмотря на то, что value всегда будет равно нулю, компилятор предварительно попытается развернуть всю цепочку классов test<n - 1>, а так как специализации, которая остановила бы процесс поиска нет, произойдет ошибка компиляции.

Оглавление
Статистика
© 2007—2012 Inside C++ Коммерческие услугиКонтактная информация

Салон эротического массажа - досуг девушки сауна. Массаж эротический для женщин