http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51013
--- Comment #6 from Marc Glisse <marc.glisse at normalesup dot org> 2011-11-08 07:44:27 UTC --- (In reply to comment #4) > I'm sorry, I misunderstood you, you meant C++11 does not mandate the constexpr > in the primary. Actually, I guess it doesn't hurt, I agree, it was your expression "per the letter" that confused me, but I am fine with the code. (In reply to comment #5) > Hmm, I think adding the overloads would interfere with usage of complex > temporaries in a constant expression. Really ? std::bitset seems to have this kind of overload for operator[]. Surprisingly, it is the only type that does, most only have a constexpr constructor, so I am not sure if there is a bug in bitset, a missing feature elsewhere, or if the situations are different. Actually, it seems that with 4.7,libstdc++ provides a constexpr overload for array::operator[] as an extension, which seems to answer the question. Or do you mean that the following would cause trouble (which seems likely, but I don't have any compiler at hand that supports both constexpr and *this references)? constexpr _Tp real()const&; _Tp&real()&; _Tp real()&&;