Вопрос относится к этому сообщению.
Некоторые авторитетные пользователи заявили, что следующий код нарушает строгие правила псевдонимов.
#include <boost/static_assert.hpp>
template <typename T>
struct MyType {
private:
T data;
public:
template <typename U>
operator U () {
BOOST_STATIC_ASSERT_MSG(sizeof(U) == sizeof(T),"Trying to convert to data type of different size");
return *((U*) &data);
}
template <typename U>
NeonVectorType<T>& operator =(const U& in) {
BOOST_STATIC_ASSERT_MSG(sizeof(U) == sizeof(T),"Trying to copy from data type of different size");
data = *((T*) &in);
return *this;
}
}
Однако я никогда не использую указатель для записи данных и никогда не делюсь указателем на них, поэтому я не вижу, как может измениться значение, содержащееся в переменной, без того, чтобы компилятор понял, что это происходит. У меня сложилось впечатление, что, возможно, я нарушаю некоторые правила, но не строгие правила псевдонимов...
Примечание: я не знаю, насколько это важно, но мой компилятор (gcc 4.9) не выдает предупреждений.