模糊的模板实例化

pre*_*eys 6 c++ templates ambiguity c++11

有人能解释一下这里的含糊之处吗?

template <typename...> struct thing;

template <typename... Rest>
struct thing<int&, Rest&...> {
    thing(int&, Rest&...) { }
};

template <typename First, typename... Rest>
struct thing<First&, Rest&...> {
    thing(First&, Rest&...) { }
};

int main() {
    int myint;
    char mychar;
    thing<int&, char&> t(myint, mychar);
}
Run Code Online (Sandbox Code Playgroud)

sp2*_*nny 0

如果你专注于int而不是int&它有效

template <typename...> struct thing;

template <typename... Rest>
struct thing<int, Rest...> {
    thing(int&, Rest&...) { }
};

template <typename First, typename... Rest>
struct thing<First, Rest...> {
    thing(First&, Rest&...) { }
};
Run Code Online (Sandbox Code Playgroud)