是否可以在内联 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 没有)。
为了更详细地重复动机,该函数是内联的并在标题中定义,并且我对在包含标题的任何地方公开变量模板不感兴趣。
我想我可以定义一个详细的命名空间并将变量模板放在那里,但是完全不公开变量模板会更好。也许这是不可能的。