有谁知道为什么调用func
的第三种方式不起作用?
template <typename T>
struct Foo
{
Foo(T t) { }
};
template <typename T>
void func(const Foo<T>& f)
{ }
int main(int argc, char *argv[])
{
func<int>(42); // works
func(Foo<int>{42}); // explicit braced initialization works
func({42}); // implicit braced initialization, doesn't work
return 0;
}
理想情况下,{42}
可以是std::initializer_list<int>
,也可以是可以采用int
值的某种类型。编译器是否应该能够查看所调用的内容,预期内容以及是否可以进行此类转换?