可以将变量模板作为模板模板参数传递吗?

inv*_*xed 11 c++ templates template-templates variable-templates c++14

以下荒谬的示例无法编译,但是还有其他方法可以将变量模板作为模板模板参数传递吗?

template<typename T>
constexpr auto zero = T{0};

template<typename T, template<typename> auto VariableTemplate>
constexpr auto add_one()
{
    return VariableTemplate<T> + T{1};
}

int main()
{
    return add_one<int, zero>();
}
Run Code Online (Sandbox Code Playgroud)

尝试编译器资源管理器

Gui*_*cot 5

简短的回答:没有。

长答案:是的,您可以通过类模板使用一些间接性:

template<typename T>
constexpr auto zero = T{0};

template<typename T>
struct zero_global {
    static constexpr auto value = zero<T>;
};

template<typename T, template<typename> class VariableTemplate>
constexpr auto add_one()
{
    return VariableTemplate<T>::value + T{1};
}

int main()
{
    return add_one<int, zero_global>();
}
Run Code Online (Sandbox Code Playgroud)

活生生的例子