コンセプトというのは、メンバー関数の演算子でも、非メンバー関数として指定する。
14.9.1.1.4
With the exception of the assignment operator (??) and operators new, new[], delete, and delete[], associated functions shall specify requirements for operators as non-member functions.
だからもし、T operator + (T,T)を非constとして使いたい場合(まあ、確かにそんなケースはあまり期待されて無いけどさ)、T operator + (T &, T)としなければならない。理屈としては分かるが、非常に非人間的だ。
しかし、代入演算子はメンバ関数として記述しなければならないという例外がある。これには当然 operator = のみならず、operator +=や-=なども含まれる。非常に分かりにくい。
しかし、メンバ関数はconcept_mapでadaptできないというのは、代入演算子にも適用されるらしい。どないせーちゅーねん。
operator+= は非メンバ関数として定義できたような…(=, (), [], -> はメンバ関数じゃなきゃいけなかったと思います)
ReplyDelete演算子がメンバ・非メンバのどちらの形式で定義されるかわからないけど、concept_map の書き方としては非メンバ形式だけを書いておけばよいようにしましょうということでしょうか??
あれ、なぜか非メンバ関数としてコンパイルできる。
ReplyDeleteおかしいな、昨日はコンパイルできなかったような気がしたのに。