mas not a pointer. reinterpret_cast should include only a pointer, a reference or integral types, and only in some combinations: pointers to and from integral types, pointers to pointers, links to links, or an integral type for yourself. In this case, you are trying to apply the std::aligned_storage<32u, 16u>::type pointer to the pointer. The best you could get from this would be a reference to casting a pointer, but that is not permitted by & dagger ;.
Try pointing your address to another type of pointer instead: reinterpret_cast<float*>(&mas); .
& cross for fun: the worst thing you could get would be if std::aligned_storage<32u, 16u>::type was a pointer type. This is doubtful since 32-byte pointers are not shared, but this can happen for std::aligned_storage<8u, 8u>::type , for example, in a very nasty standard library. Let me call it Hell ++. Thus, in Hell ++, it will compile fine, and you end up leading the type of pointer to another type of pointer, and then do all the bad things on it like dereferencing it. This would be a disaster, because if std::aligned_storage<32u, 16u>::type was a pointer type, the objects would not have an address for the store, but instead they would be the store.
source share