2011年3月10日のブックマーク (1件)

  • C++0x SFINAE問題の解決 - Faith and Brave - C++で遊ぼう

    以下のコードは、多くのコンパイラでエラーになりますが C++03 ではこれを禁止する規定はありません。 template <int I> struct A {}; char xxx(int); char xxx(float); template <class T> A<sizeof(xxx((T)0))> f(T){} int main() { f(1); } これが問題になる理由は ・実装が難しいから ・名前解決と ABI に影響があるから ・標準でどう規定するかを指摘する必要があったから C++0x では、 decltype や constexpr などの新機能の追加により状況が変わりました。 (このままにしておくと問題がもっと大きくなる) そのため、 SFINAE の扱いを明確にするために、 SFINAE failure ではないエラーを列挙することになりました。 ・式の外部の構成要

    C++0x SFINAE問題の解決 - Faith and Brave - C++で遊ぼう