演绎指南和专业知识,以了解是否指定了模板参数:不起作用

时间:2018-09-26 14:42:18

标签: c++ templates c++17

考虑以下代码:

#include <iostream>

template <class... T>
struct structure
{
    template <class... Args>
    constexpr structure(Args&&...) noexcept {
        std::cout << "structure<T...>" << std::endl;
    }
};

template <class... T>
struct structure<void, T...>
{
    template <class... Args>
    constexpr structure(Args&&...) noexcept {
        std::cout << "structure<void, T...>" << std::endl;
    }
};

template <class... Args>
structure(Args&&...) -> structure<void, Args...>;

int main(int argc, char* argv[])
{
    structure<int> s1(42);
    structure s2(42);
    return 0;
}

它产生以下输出:

structure<T...>
structure<T...>

而我本来期望的:

structure<T...>
structure<void, T...>

在这种情况下,为什么推导指南失败了?或至少没有按我预期的那样工作。

0 个答案:

没有答案