【发布时间】:2021-10-24 16:36:08
【问题描述】:
#include <initializer_list>
struct Foo
{
template <typename T>
Foo(std::initializer_list<T>) {}
template <typename T>
Foo(std::initializer_list<typename T::BarAlias>) {}
};
struct Bar
{
using BarAlias = Bar;
};
int main()
{
Foo foo{ Bar{} };
}
我相信编译器应该在Foo 中生成两个完全相同的构造函数。为什么它甚至可以工作?
【问题讨论】:
-
你的想法是正确的,无论是构造函数
{}。 -
这里是答案SFINAE。
-
我看到了两个不同的构造函数。两者之一(构造函数#2)比另一个更专业,在这种情况下被选中。
-
如果比较专业的话我想应该选择它。
标签: c++ templates redefinition