中3女子です。 C++11が、C++03およびそれ以前に対して明らかに優れていることは今更言うまでもない。 しかしながら、C++11にも恥ずべき糞仕様は存在する。 その糞の代表例が、constexprメンバ関数が暗黙でconst修飾されることである。 これによってどんな問題が生ずるかを、まずは見てゆく。 constexprメンバ関数が暗黙でconst修飾される糞仕様の問題 まずは、適当な値のホルダクラスを考える。 template<typename T> struct Holder { T value; }; Holderはリテラルクラスの要件を満たすから、当然定数式として扱える。 constexpr auto t = Holder<int>{ 100 }; constexpr int i = t.value; では、下記のコードは合法か? constexpr int i = Holder