Dedução de argumento do modelo de classe não funciona com o modelo de alias

considere o código colado abaixo. Eu defini uma classe muito simples, para a qual o compilador gera um guia de dedução implícita para que possa ser construído sem argumentos explícitos de modelo. No entanto, a dedução do argumento do modelonão trabalhe para construir um objeto a partir de um modelo de alias simples que só encaminha diretamente para a classe de destino:

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

Como você pode ver em um comentário de código acima, o g ++ está me dando um erro sobre o uso do modelo com alias sem argumentos de modelo. Eu esperava que, nesse caso, a dedução do argumento do modelo fosse encaminhada.

Então minha pergunta: Isso ocorre por design expresso da redação atual da proposta de dedução de argumento do modelo de classe? Ou isso é um recurso inacabado ou bug na implementação atual do g ++ do recurso? E isso seria mais uma pergunta para os autores da proposta ou para o Comitê ISO C ++, mas se algum deles vir o seguinte: seria desejável que a redação final do recurso incluísse a possibilidade de incluir modelos de alias como este para também guias implícitos gerados para eles?

Eu posso entender que, como os modelos de alias podem ter qualquer tipo de parâmetro, nem sempre é possível para o compilador deduzir com êxito os argumentos do modelo da classe de destino, mas em um caso como esse, eu esperaria que o compilador fosse capaz de da mesma maneira que pode diretamente para a classe de destino.

Estou construindo com o gcc construído a partir da cabeça apenas alguns dias atrás, usando--std=c++1z. A informação completa da versão é:gcc version 7.0.0 20161201 (experimental) (Homebrew gcc HEAD- --with-jit)

questionAnswers(2)

yourAnswerToTheQuestion