![]() |
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; } |
Правильный ответ. | ||
Такая попытка закончится ошибкой компиляции. Причем ошибка будет заключаться в том, что компилятор отругает вас за то, что в программе существует две конкретизации test::nested<int>. Выражение value = nested<int>::value еще не знает о том, что снаружи существует специализация шаблона, поэтому будет выполнена конкретизация общего шаблона. |
|
Статистика |
|