いろいろな投稿を読んで、以下はコンパイルされないはずだと理解しています。
#include <type_traits>
#include <iostream>
template <bool is_constant> struct A {
// Need to fix this for g++-4.7.2
// implicit conversion to int iff is_constant == true statically
template <class = typename std::enable_if<is_constant>::type>
constexpr operator int() const {
return 10;
}
};
int main()
{
A<true> a;
int i = 2 + a;
std::cout << i << "\n";
A<false> b;
// int i = 2 + a; // compilation error
}
それでも、clang 3.2はこのコードバージョンを受け入れ、正常に動作します。私の理解では、内部バージョンのenable_if_cを内部で使用しています。今、私はそれを受け入れないgccの下でこれをコンパイルしたいと思います。他の投稿と同じように、実際のタイプを用意してSFINAEを使用するとよいと思います。
私の場合:
- 演算子を定義しようとしているので、デフォルトの型/値を持つ追加のパラメーターをいじくり回すことができません->SFINAEを使用できないようです。
- すべてをconstexprに保持する必要があるため、継承も使用できません。
- プロジェクト要件のため、コード(enable_if_c)にブーストインクルードを使用できません
抜け道はありますか?