Re: Что говорит стандарт про такой код?
От: jazzer Россия Skype: enerjazzer
Дата: 25.11.05 09:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Hi,


А>
А>void Baz(float * ptr, size_t size)
А>{
А>  for (size_t i = 0; i < size; ++i)
А>  {
А>    ptr[i] = (float)rand() / (float)RAND_MAX; 
А>  }
А>}

А>template <class T>
А>class Foo
А>{
А>public:
А>  T a;
А>  T b;
А>  T c;

А>  enum {size = 3};
А>};

А>template <template <class> class T>
А>void Bar(T<float> var)
А>{
А>  Baz(&var, T::size);       //  Нет ли здесь Undefined behaviour или чего еще плохого?
А>}
А>


UB. Foo не является layout compatible с массивом float-ов.
Я бы на твоем месте в классе Foo завел явный массив с нужными тебе типом и размером, а a, b и с сделал был ссылками на конкретные его элементы — тогда бы все работало.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.