std::begin
Eigen3 行列の周りに次のラッパーがあります。
namespace std {
template<class T, int nd> auto begin(Eigen::Matrix<T,nd,1>& v)
-> decltype(v.data()) { return v.data(); }
}
置換が失敗し、コンパイラ エラーが発生します ( error : no matching function for call to 'begin' )。このオーバーロードの場合、clang は次を出力します。
.../file:line:char note: candidate template ignored:
substitution failure [with T = double, nd = 4]
template<class T, int nd> auto begin(Eigen::Matrix<T,nd,1>& v)
^
このオーバーロードを選択してほしい。私は型がdouble
andint
であることを期待しています。関数を見ると、実際に失敗する可能性があるものは何もありません。
時々、同様のエラーが発生します。ここで、clang は次のように教えてくれます。ただし、これはデバッグにはまったく役立ちません。置換が失敗した理由は何ですか? どこで代用できなかったのですか?私にとって明らかな唯一のことは、コンパイラが知っているということですが、意図的に教えていません:(
ここで正確に何が失敗したかをclangに強制することは可能ですか?
この機能は簡単で、問題があります。より複雑な機能では、事態は悪化するだけだと思います。この種のエラーをどのようにデバッグしますか?