[All VС versions] fatal error C1001: INTERNAL COMPILER ERROR
От: Ligen Украина http://zone-of-ambiguity.blogspot.com/
Дата: 26.05.10 11:40
Оценка: 69 (3)
Этот прекрасный код вызывает у микрософтовского компилятора разрыв шаблона:

#include "string"

template<class Type, class ObjectType, template<class> class Traits, template<class> class AllocatorType>
void ToString(const ObjectType & object, std::basic_string<Type, Traits<Type>, AllocatorType<Type> > * pStr)
{
}

template<class Type, template<class> class Traits, template<class> class AllocatorType>
void ToString(int object, std::basic_string<Type, Traits<Type>, AllocatorType<Type> > * pStr)
{
}

int main()
{
    int val = 0;
    std::string str;
    ToString(val, &str);
    return 0;
}

Попробовал на версиях 7.1, 9.0, 10.0, результат один и тот же:

d:\Projects\test\main.cpp(17) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 2701)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information

Самое прекрасное в этом баге то, что если поменять местами в первой функции Type и ObjectType местами, например, так:
template<class ObjectType, class Type, template<class> class Traits, template<class> class AllocatorType>
void ToString(const ObjectType & object, std::basic_string<Type, Traits<Type>, AllocatorType<Type> > * pStr) ..

то он воспроизводиться не будет.
Форму, куда сабмитить баг я вроде бы нашел.
Но у меня возник вопрос, может его уже кто-то сабмитил? можно ли где-то посмотреть список багов на MS С++ компиляторы?


26.05.10 16:56: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Viva el Junta Militar! Viva el Presidente!
Re: [All VС versions] fatal error C1001: INTERNAL COMPILER E
От: Кодт Россия  
Дата: 26.05.10 12:04
Оценка:
Здравствуйте, Ligen, Вы писали:

L>Этот прекрасный код вызывает у микрософтовского компилятора разрыв шаблона:


Оффтопик: будьте проще, и люди потянутся.
L>#include "string"

L>template<class Type, class ObjectType, class Traits_by_Type, class Allocator_by_Type>
L>void ToString(const ObjectType & object, std::basic_string<Type, Traits_by_Type, Allocator_by_Type> * pStr)
L>{
L>}

L>template<class Type, class Traits_by_Type, class Allocator_by_Type>
L>void ToString(int object, std::basic_string<Type, Traits_by_Type, Allocator_by_Type> * pStr)
L>{
L>}

L>int main()
L>{
L>    int val = 0;
L>    std::string str;
L>    ToString(val, &str);
L>    return 0;
L>}
Перекуём баги на фичи!
Re: [All VС versions] fatal error C1001: INTERNAL COMPILER E
От: Кодт Россия  
Дата: 26.05.10 12:26
Оценка:
Здравствуйте, Ligen, Вы писали:

L>Этот прекрасный код вызывает у микрософтовского компилятора разрыв шаблона:


Попробовал сделать дистиллированный код
template<class T> struct tr {};
template<class C, class Tr=tr<C> > struct str {};

template<class C, class SRC, template<class> class TR>
void tostring(const SRC& src, str< C,TR<C> >* dst)
{}

template<class C, template<class> class TR>
void tostring(int src, str< C,TR<C> >* dst)
{}

int main()
{
    int src = 0;
    str<char> dst;
    tostring(src, &dst);
    return 0;
}

ICE воспроизводится.
Пропадает, если
— в первой перегрузке tostring(SRC,...) вынести class SRC первым параметром
— перегрузку tostring(int,...) перетащить выше tostring(SRC,...)
— убрать любую из перегрузок

Ещё более дистиллированный код:
template<class T> struct tr {};
template<class Tr> struct str {};

template<class C, class SRC, template<class> class TR>
void tostring(const SRC& src, str< TR<C> >* dst)
{}

template<class C, template<class> class TR>
void tostring(int src, str< TR<C> >* dst)
{}

int main()
{
    int src = 0;
    str< tr<char> > dst;
    tostring(src, &dst);
    return 0;
}

С теми же симптомами.
Перекуём баги на фичи!
Re[2]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: c-smile Канада http://terrainformatica.com
Дата: 27.05.10 04:16
Оценка:
Здравствуйте, Кодт, Вы писали:

Николай, а что точно есть такое

template<class> class TR


?

"Потерялася я чёй-та ..."
Re[3]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: rg45 СССР  
Дата: 27.05.10 05:21
Оценка: 38 (1)
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Кодт, Вы писали:


CS>Николай, а что точно есть такое


CS>
CS>template<class> class TR
CS>


CS>?


Извините, что вклиниваюсь, это называется шаблонный параметр шаблона, и описан он в действующем стандарте языка в 14.3.3 — Template template arguments.
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: c-smile Канада http://terrainformatica.com
Дата: 29.05.10 06:17
Оценка: +2 :))) :))
Здравствуйте, rg45, Вы писали:

CS>>
CS>>template<class> class TR
CS>>


CS>>?

R>Извините, что вклиниваюсь, это называется шаблонный параметр шаблона, и описан он в действующем стандарте языка в 14.3.3 — Template template arguments.

Круто. Думаю я так что пора ужо мне в Немерлисты записываться ...
Re[5]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: Кодт Россия  
Дата: 29.05.10 22:03
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Круто. Думаю я так что пора ужо мне в Немерлисты записываться ...


Зря. Там тебя поджидают макросы.
Перекуём баги на фичи!
Re[5]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: Vain Россия google.ru
Дата: 30.05.10 00:33
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>>>
CS>>>template<class> class TR
CS>>>

CS>>>?
R>>Извините, что вклиниваюсь, это называется шаблонный параметр шаблона, и описан он в действующем стандарте языка в 14.3.3 — Template template arguments.
CS>Круто. Думаю я так что пора ужо мне в Немерлисты записываться ...
Думаете полегчает?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: c-smile Канада http://terrainformatica.com
Дата: 30.05.10 05:53
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, c-smile, Вы писали:


CS>>Круто. Думаю я так что пора ужо мне в Немерлисты записываться ...


К>Зря. Там тебя поджидают макросы.


Ну тогда в brainfuckers стройными рядами ...

Надо Влада2d уговорить еще для компании. Председателем. Главным так сказать... Ну и Кочеткова с его медальками...
А вот интересно как медалька этого клуба будет выглядеть ...

У-у-у... Так... господ гусаров просьба не беспокоить...

И эта! Все имена в данном сообсчении вымышленные!
Re[6]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: c-smile Канада http://terrainformatica.com
Дата: 30.05.10 05:56
Оценка: :))
Здравствуйте, Vain, Вы писали:

CS>>Круто. Думаю я так что пора ужо мне в Немерлисты записываться ...

V>Думаете полегчает?

Ну один раз облегчит точно.
Re: [All VС versions] fatal error C1001: INTERNAL COMPILER E
От: dmitry_npi Россия  
Дата: 31.05.10 12:16
Оценка:
Здравствуйте, Ligen, Вы писали:

L>Этот прекрасный код вызывает у микрософтовского компилятора разрыв шаблона:


L>template<class Type, class ObjectType, template<class> class Traits, template<class> class AllocatorType>

L>void ToString(const ObjectType & object, std::basic_string<Type, Traits<Type>, AllocatorType<Type> > * pStr)
L>{
L>}

Я прошу прощения (за оффтопик), но этот код даже у людей вызывает разрыв шаблона...
Атмосферная музыка — www.aventuel.net
Re[2]: [All VС versions] fatal error C1001: INTERNAL COMPILE
От: Кодт Россия  
Дата: 31.05.10 14:31
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Я прошу прощения (за оффтопик), но этот код даже у людей вызывает разрыв шаблона...

Да ладно, вполне читаемый код. После десятка лет практики...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.