[c++] 변수 템플릿을 템플릿 템플릿 인수로 전달할 수 있습니까?

다음의 무의미한 예제는 컴파일되지 않지만 변수 템플릿을 템플릿 템플릿 인수로 전달하는 다른 방법이 있습니까?

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>();
}

컴파일러 탐색기를 사용해보십시오



답변

짧은 대답 : 아니요.

긴 대답 : 예 클래스 템플릿을 통해 간접적 인 것을 사용할 수 있습니다.

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>();
}

라이브 예


답변