Можно ли использовать шаблон переменной внутри встроенной функции constexpr без раскрытия самого шаблона переменной?
Например, это компилируется и работает:
template<typename T> constexpr T twelve_hundred = T(1200.0);
template<typename T>
inline constexpr T centsToOctaves(const T cents) {
return cents / twelve_hundred<T>;
}
Но это не компилируется:
template<typename T>
inline constexpr T centsToOctaves(const T cents) {
template<typename U> constexpr U twelve_hundred = U(1200.0);
return cents / twelve_hundred<T>;
}
Причина, по-видимому, в том, что объявления шаблонов не разрешены в области блока (GCC выдает информативное сообщение об ошибке, а Clang - нет).
Чтобы повторить мотивацию более подробно, функция является встроенной и определена в заголовке, и я не заинтересован в раскрытии шаблона переменной везде, где заголовок включен.
Думаю, я могу определить подробное пространство имен и поместить туда шаблон переменной, но было бы лучше вообще не раскрывать шаблон переменной. Может быть, это невозможно.