Вот что пишет по её поводу МСДН:
'type' : types with no linkage cannot be used as template arguments
You cannot generate a template class (a class from a class template) based on a local type. Types used to instantiate templates must have external linkage.
Example
// C2926.cpptemplate<class T> class X{};
void f()
{
struct Y{};
X<Y> x; // C2926
}
int main()
{
}
Но почему так нельзя я не понимаю!
Може кто-нибудь из гуру объяснит в чем проблема?
Исправлено форматирование. Пожалуйста, пользуйтесь тегами [c] ... [/c], [code] ... [/code] и т.п. для выделения фрагментов кода. -- ПК.
Здравствуйте, Аноним, Вы писали:
А>Вот что пишет по её поводу МСДН: А>'type' : types with no linkage cannot be used as template arguments
А>You cannot generate a template class (a class from a class template) based on a local type. Types used to instantiate templates must have external linkage.
А>Но почему так нельзя я не понимаю! А>Може кто-нибудь из гуру объяснит в чем проблема?
Здравствуйте, Аноним, Вы писали:
А>Вот что пишет по её поводу МСДН: А>'type' : types with no linkage cannot be used as template arguments
А>You cannot generate a template class (a class from a class template) based on a local type. Types used to instantiate templates must have external linkage.
А>Example А>
А>Но почему так нельзя я не понимаю! А>Може кто-нибудь из гуру объяснит в чем проблема?
Сугубое ИМХО.
Если бы это было разрешено, то что получилось бы: строка Х<Y> x начала расширяться локальным типом. Результат инстанцирования — какой должен быть (локальный или глобальный), учитывая, что шаблон — глобальный? Если б я писал компилер, этот вопрос меня б смутил. Похоже на то, что тогда придется эту инстанцирование выполнять во время выпполнения программы, что принципиально противоречит идее шаблонов.
Если я не прав — более знающий народ меня поправит.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
L> Сугубое ИМХО. L> Если бы это было разрешено, то что получилось бы: строка Х<Y> x начала L> расширяться локальным типом. Результат инстанцирования — какой должен быть L> (локальный или глобальный), учитывая, что шаблон — глобальный?
В данном случае это не имеет значения. Важно только то, что имя полученного
типа должно быть уникально. Вот здесь и "порылась собака": локальность типа Y,
в частности, означает, что никакого уникального в рамках всей программы имени
с этим типом не связано. Соответственно, использовать для создания уникального
имени специализации X<Y> нечего. Есть предложение к комитету эту ситуацию
изменить:
L>> Сугубое ИМХО. L>> Если бы это было разрешено, то что получилось бы: строка Х<Y> x начала L>> расширяться локальным типом. Результат инстанцирования — какой должен быть L>> (локальный или глобальный), учитывая, что шаблон — глобальный?
ПК>В данном случае это не имеет значения. Важно только то, что имя полученного ПК>типа должно быть уникально. Вот здесь и "порылась собака": локальность типа Y, ПК>в частности, означает, что никакого уникального в рамках всей программы имени ПК>с этим типом не связано. Соответственно, использовать для создания уникального ПК>имени специализации X<Y> нечего. Есть предложение к комитету эту ситуацию ПК>изменить:
ПК>Anthony Williams. Making Local Classes more Useful ПК>http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1427.pdf
Спасибо за ссылку.
Всеж-таки дальше я писал, что тогда вместо статического инстанцирования на этапе компиляции мы вынуждены будем перейти к динамическому инстанцированию во время выполнения. Такая "динамическая типизация" как раз в языках вроде Лиспа реализована и в корне противоречит идеям С++.
Ы?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
L> Всеж-таки дальше я писал, что тогда вместо статического инстанцирования на L> этапе компиляции мы вынуждены будем перейти к динамическому инстанцированию L> во время выполнения. <...>
Не будет там инстанциирования во время выполнения. Прямо во время компиляции
будет инстанциироваться шаблон, специализации будет дано соответствующее имя, —
и все дела.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен