模棱两可的模板实例化

Ambiguous template instantiation

本文关键字:实例化 模棱两可      更新时间:2023-10-16

有人可以在这里解释歧义吗?

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

如果您专注于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&...) { }
};