C ++は、必要に応じてエラーを生成する場合を除き、インスタンス化テンプレートの場合はアクセス制御を考慮しないために使用されます。使用しているコンパイラは、それらのルールをまだ使用しています。そのため、あなたのクラスは定義と構築できないとは見なされません。代わりに、チェック自体は不可能です。
GCC 4.8以降はこれをサポートしています。 4.8で成功し、4.7で失敗する簡単なデモプログラムは次のとおりです。
#include <type_traits>
class S { S() {} };
int main() {
return std::is_default_constructible<S>::value;
}
4.8では、これは0を返します。4.7では、コンパイル時間エラーが生成されます。
これを解決するには、デフォルトのコンストラクターを持っていないことを確認してください。ダミーの引数をコンストラクターに追加し、常にそのダミー引数を常に渡すことができます。