Когда константа возвращается, тип вмешиваются в шаблонное инстанцирование?

От GotW Herb Sutter № 6

Возврат значением должен обычно быть константой для невстроенных типов возврата...

Примечание: Lakos (стр. 618) приводит доводы против возвращения значения константы и отмечает, что это избыточно для builtins так или иначе (например, возвращая "интервал константы"), который он отмечает, может вмешаться в шаблонное инстанцирование.

В то время как Sutter, кажется, не соглашается относительно того, возвратить ли значение константы или значение неконстанты при возврате объекта несозданного типа значением с Lakos, он обычно соглашается, что возвращение значения константы встроенного типа (например, интервал константы) не является хорошей идеей.

В то время как я понимаю, почему это бесполезно, потому что возвращаемое значение не может быть изменено, поскольку это - rvalue, я не могу найти пример того, как это могло бы вмешаться в шаблонное инстанцирование.

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

5
задан Rob Kennedy 28 May 2010 в 05:38
поделиться

1 ответ

Вот простой пример с указателями функций:

const int f_const(int) { return 42; }
int f(int) { return 42; }

template <typename T>
void g(T(*)(T))
{
    return;
}

int main()
{
    g(&f_const); // doesn't work:  function has type "const int (*)(int)"
    g(&f);       // works: function has type "int (*)(int)"
}

Обратите внимание, что Visual C++ 2010 некорректно принимает оба варианта. Comeau 4.3.10 и g++ 4.1.2 корректно не принимают вызов g(&f_const).

3
ответ дан 15 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: