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

11. Специализация nested-типа

Как вы думаете, чем закончится попытка скомпилировать данный код?
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
struct test
{
    template <class T>
    struct nested
    {
        enum
        {
            value
        };
    };

    enum
    {
        value = nested<int>::value
    };
};

template <>
struct test::nested<int>
{
private:

    enum
    {
        value
    };
};

int main()
{
    test::value;

    return 0;
}
Компилировать в Comeau
Правильный ответ.
Такая попытка закончится ошибкой компиляции. Причем ошибка будет заключаться в том, что компилятор отругает вас за то, что в программе существует две конкретизации test::nested<int>. Выражение value = nested<int>::value еще не знает о том, что снаружи существует специализация шаблона, поэтому будет выполнена конкретизация общего шаблона.

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

acer ноутбуки. деревянные окна