私はMSVC8の簡潔なエラーメッセージ:より明示的になる方法はありますか?
Baz<Foo, Bar> blah_blah(Foo const& f, Bar const& b)
{ return Baz<Foo, Bar>(f, b); }
持っていると私はこのエラーを取得:
error C2893: Failed to specialize function template 'Baz<Foo, Bar> blah_blah(Foo, Bar)'
with the following template arguments:
'ConcreteFoo'
'ConcreteBar'
間違いなく役に立たない、おそらく問題(あるはかなり毛深い関与テンプレートを調査して、私に多くの時間がかかりますし、ConcreteFoo
とConcreteBar
はそれ自体が毛状のテンプレートです)。
ConcreteFoo
とConcreteBar
のオブジェクト/メンバ関数が存在しないことを知りたいのですが、Baz
テンプレートのインスタンス化を妨げています。
Visual C++ 2005からのこの愚かなエラー報告を回避する方法はありますか?
EDIT(関連する):バズ、ConcreteFooとConcreteBarはこのようなものです:
template <typename T, typename U, bool = f(T, U), int = g(T, U), etc>
struct Baz
{ ... }
とかなりの数の部分的な特殊化があります。私はコンパイラのメッセージからどれが取り出されたのか知っています。また、関数fとgは醜いメタプログラミングのものですが、私は自分の問題がそこから来ていると信じています。正しい結果を得られないfまたはgのいずれかがあります。 ConcreteFooまたはConcreteBarのいずれかに型/静的メンバが存在していない必要があります。
また、私はプロジェクトの関連する部分をつかんでテストするためのサイドプロジェクトを書くのは難しいです。もっと「インライン」なものがほしいです。
完全なエラーメッセージをそのまま投稿しないでください。 –
これは確かに私のNDAに違反するだろう。エラーメッセージは、名前が違うにしても、私が投稿したものです。 –
コンパイラが役に立たないとき、私は問題を切り離そうとします。私はしようとします:関数を返すvoidと再コンパイル(実装の機能を空にするように); intなどの他のパラメータ型を試してみてください。 – gnobal