考虑下面粘贴的代码.我已经定义了一个非常简单的类,编译器为其生成一个隐式推理指南,因此可以在没有显式模板参数的情况下构造它.但是,模板参数推导不适用于从简单别名模板构造对象,该模板仅直接转发到目标类:
template< typename A, typename B >
struct Foo {
    Foo( A const &a, B const &b )
            : a_(a), b_(b)
    { }
    A a_;
    B b_;
};
template< typename A, typename B >
using Bar = Foo<A, B>;
auto foobar() {
    Foo r{1, 2};
    Bar s{3, 4};
    // ../src/geo/vector_test_unit.cpp: In function 'auto foobar()':
    // ../src/geo/vector_test_unit.cpp:16:6: error: missing template arguments before 's'
    //   Bar s{3, 4};
    //       ^
    return 1;
}
正如您从上面的代码注释中看到的那样,g ++给出了一个关于在没有模板参数的情况下使用别名模板的错误.我希望在这样的实例中转发模板参数推导.
所以,我的问题:这是通过表达模板参数演绎提案的当前措辞的明确设计吗?或者这是该功能的当前g ++实现中未完成的功能还是错误?对于提案的作者或C++ ISO委员会来说,这将是一个更大的问题,但如果其中任何一个人看到这一点:是否希望该功能的最终措辞包括启用别名模板,例如是否为他们生成了隐含指南?
我可以理解,因为别名模板可以有任何类型的模板参数,编译器可能并不总是能够成功推导出目标类模板参数,但在这种情况下,我希望编译器能够在它可以直接用于目标类. …