msvc8 bug template + nested class
От: Alexander G Украина  
Дата: 19.11.09 16:19
Оценка: 82 (4)
Как думаете, скомпилируется ли и что напишет:

#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
От: Alexander G Украина  
Дата: 19.11.09 17:03
Оценка:
Здравствуйте, Кодт, Вы писали:


К>А если добавить третью копию, то уже выругается на переопределение.


Копию добавлять уметь надо

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
От: denisko http://sdeniskos.blogspot.com/
Дата: 19.11.09 17:29
Оценка:
Здравствуйте, 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
От: Alexander G Украина  
Дата: 19.11.09 18:22
Оценка:
Здравствуйте, 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
От: Yuki-no Tenshi Украина  
Дата: 20.11.09 13:43
Оценка:
Мне вот такая комбинация больше всего понравилась. В 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; }
};
雪の天使
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.