SFINAE関係ねぇ〜
C++テンプレートテクニック を少しずつ読んでいるがおかしな記述発見。
Chapter5 p109より
配列をbegin()に渡した場合、テンプレートのインスタンス化によってbegin()の戻り値の型であるtypename Containter;;iteratorへの置き換えに失敗します。このとき、コンテナ版begin()がオーバーロードの対象外となり、配列版のbegin()が呼び出されることになるのです。
これはいったい何のことだろう?
こんなことを書くと、以下のように戻り値の型をSFINAEが働かない形にすると、オーバーロードできなくなると誤解する人がでないだろうか。
template <class C> void hoge(C& c) { // ... } template <class T, atd::size_t N> void hoge(T (&a)[N]) { // ... }
そんなコンパイラ見たことねぇよ。