у меня
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?
РЕДАКТИРОВАТЬ (актуально): Baz, ConcreteFoo и ConcreteBar похожи на это:
template <typename T, typename U, bool = f(T, U), int = g(T, U), etc>
struct Baz
{ ... }
и есть немало частичных специализаций. Я знаю, какой взят из сообщения компилятора. Кроме того, функции f и g - это уродливые уродливые вещи метапрограммирования, и я считаю, что моя проблема в этом заключается: есть одна из f или g, которая не дает правильного результата. Должен быть какой-то тип / статический член, отсутствующий в ConcreteFoo или ConcreteBar, и я не знаю, какой именно.
Кроме того, мне сложно просто взять соответствующие части проекта и написать сторонний проект для тестирования, я бы хотел что-то более "встроенное".