У меня есть следующие std::begin
оберток вокруг матриц Eigen3:Как получить дополнительную информацию об ошибках замены замещения клана?
namespace std {
template<class T, int nd> auto begin(Eigen::Matrix<T,nd,1>& v)
-> decltype(v.data()) { return v.data(); }
}
Замена терпит неудачу, и я получаю ошибку компиляции (ошибки: нет подходящей функции для вызова «начать»). Для этой перегрузки выходы 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
и int
, т. Е. Они выводятся так, как я хочу, чтобы они были выведены (и, надеюсь, правильно). Посмотрев на функцию, я не вижу ничего, что может действительно потерпеть неудачу.
Время от времени я получаю подобные ошибки. Здесь clang говорит мне: сбой замены, я не помещаю эту функцию в набор разрешений перегрузки. Однако это не помогает мне отлаживать вообще. Почему не удалось заменить? Что именно не могло быть заменено где? Единственное, что для меня очевидно, что компилятор знает, но сознательно не говорит мне :(
Можно ли силы лязг сказать мне что же именно здесь неудачу?
Эта функция тривиальна и у меня возникают проблемы. В более сложных функциях, я думаю, все может только ухудшиться. Как вы идти об отладке такого рода ошибки?