msvc8 bug template + nested class
Как думаете, скомпилируется ли и что напишет:
#include <stdio.h>
template <class >
struct X
{
struct Y;
};
template <class T>
struct X<T>::Y
{
int i[20];
int f() { return 1; }
};
template <class T>
struct X<T>::Y
{
int j[40];
char f() { return 2; }
};
int main()
{
X<void >::Y y;
printf("%d\n" , sizeof (y)/sizeof (int ) );
printf("%d\n" , y.f() );
return 0;
}
Русский военный корабль идёт ко дну!
Re: msvc8 bug template + nested class
От:
Кодт
Дата: 19.11.09 16:58
Оценка:
Здравствуйте, Alexander G, Вы писали:
AG>Как думаете, скомпилируется ли и что напишет:
Колдунство! А если добавить третью копию, то уже выругается на переопределение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[2]: msvc8 bug template + nested class
Здравствуйте, Кодт, Вы писали:
К>А если добавить третью копию, то уже выругается на переопределение.
Копию добавлять уметь надо
template <class T>
struct X<T>::Y
{
int i[20];
int f() { return 1; }
};
template <class T>
struct X<T>::Y
{
int j[40];
char f() { return 2; }
};
template <class T>
struct X<T>::Y
{
int k[60];
short f() { return 3; }
};
Русский военный корабль идёт ко дну!
Re[3]: msvc8 bug template + nested class
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, Кодт, Вы писали:
К>>А если добавить третью копию, то уже выругается на переопределение.
AG>Копию добавлять уметь надо
AG>AG>template <class T>
AG>struct X<T>::Y
AG>{
AG> int i[20];
AG> int f() { return 1; }
AG>};
AG>template <class T>
AG>struct X<T>::Y
AG>{
AG> int j[40];
AG> char f() { return 2; }
AG>};
AG>template <class T>
AG>struct X<T>::Y
AG>{
AG> int k[60];
AG> short f() { return 3; }
AG>};
AG>
Дэвид Блейн?
<Подпись удалена модератором>
Re[4]: msvc8 bug template + nested class
Здравствуйте, denisko, Вы писали:
D>Дэвид Блейн?
Я сам был надолго озадачен. Такая штука случайно оказалась в продакшн коде: функтор с одинаковым определенем в .h и .cpp. Когда его пришлось подправить, оказалось, что который править и как оно вообще линкуется — неясно.
Русский военный корабль идёт ко дну!
Re[3]: msvc8 bug template + nested class
От:
Кодт
Дата: 20.11.09 10:08
Оценка:
Здравствуйте, Alexander G, Вы писали:
AG>Копию добавлять уметь надо
Ах вот, в чём дело: сигнатуры должны быть разными... Щяйтян!
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[3]: msvc8 bug template + nested class
Мне вот такая комбинация больше всего понравилась. В MSVS 9 SP 1 всё прекрасно компилится
template <class T>
struct X<T>::Y
{
int a[40];
char f() { return 1; }
};
template <class T>
struct X<T>::Y
{
int b[40];
signed char f() { return 2; }
};
template <class T>
struct X<T>::Y
{
int c[40];
unsigned char f() { return 3; }
};
雪の天使
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить