Краткое сообщение об ошибке с MSVC8: есть ли способ быть более явным? - PullRequest
0 голосов
/ 16 декабря 2010

у меня

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, и я не знаю, какой именно.

Кроме того, мне сложно просто взять соответствующие части проекта и написать сторонний проект для тестирования, я бы хотел что-то более "встроенное".

1 Ответ

0 голосов
/ 16 декабря 2010

ConcreteFoo и ConcreteBar - это шаблоны или классы?И так, это специализация или частичная специализация, которую вы пытаетесь?

Трудно сказать, когда мы не видим полный ошибочный пример.

Кстати, вы пробовали свой код надругой компилятор, такой как comeau tryitout, прежде чем винить компилятор?

...