The question relates to this post.
Some authoritative users stated that the following code breaks strict aliasing rules.
#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;
    }
}
However, I am never using a pointer to write data, and I am never sharing a pointer to it, so I cannot see how value contained in a variable can change without the compiler realizing that this is happening. My impression is that maybe I am breaking some rules, but not the strict aliasing ones...
Note: I don't know how much this matters, but my compiler (gcc 4.9) does not issue warnings.
 
     
     
    