Предположим у меня есть два шаблонных типа: основной, который будет везде использоваться и вспомогательный, для нужд реализации. И я хочу объявить функцию которая принимает основной тип.
template
template
T v;
operator Usefull
template
Helper
template
И я хочу использовать это вот так:
int main()
{
Usefull
Но возникает ошибка компиляции:
template argument deduction/substitution failed:
'Helper
Использовать static_cast
То есть пользователь не должен знать с чем он работает на самом деле, Useful и Helper для него должны вести себя одинаково. Может здесь можно использовать наследование, но я не приложу ума как это организовать.
Ответ
Согласно примечанию к параграфу №4 в разделе 14.8.2.1 Deducing template arguments from a function call стандарта C++
[ Note: as specified in 14.8.1, implicit conversions will be performed
on a function argument to convert it to the type of the corresponding
function parameter if the parameter contains no template-parameters
that participate in template argument deduction. Such conversions are
also allowed, in addition to the ones described in the preceding list.
—end note ]
В вашем случае соответствующий параметр функции содержит шаблонный параметр, который участвует в выведении шаблонного аргумента. Поэтому вам придется явно указать шаблонный аргумент или явно использовать приведение типов. Например
Usefull
foo
Комментариев нет:
Отправить комментарий