Почему вывод аргумента шаблона для шаблонов классов не работает в простой структуре?

С++ 17 поддерживает template argument deduction for class templates.

См. www.open-std.org/ jtc1/sc22/wg21/docs/papers/2016/p0091r3.html для получения подробной справочной информации.

Однако приведенный ниже код не работает должным образом;

#include <utility>

template<typename T>
struct A
{
    T x;
};

int main()
{
    auto p = std::pair{ 1, 2 }; // ok, as expected.

    auto a = A{ 0 };
    //
    // error : no viable constructor or deduction guide
    // for deduction of template arguments of 'A'
    //
}

Мой компилятор clang 5.0 с -std=c++1z.

Почему template argument deduction for class templates не работает с простой структурой?


person xmllmx    schedule 25.03.2017    source источник
comment
C++17 @n.m. уже изменил это.   -  person Yakk - Adam Nevraumont    schedule 25.03.2017
comment
@Yakk это уже есть?   -  person n. 1.8e9-where's-my-share m.    schedule 25.03.2017
comment
Ну, похоже, сообщение об ошибке говорит само за себя. Вам нужен либо конструктор, либо руководство по дедукции. В этой статье предлагается расширить вывод шаблонных аргументов для функций на конструкторы шаблонных классов.   -  person n. 1.8e9-where's-my-share m.    schedule 25.03.2017
comment
@н.м. Почти отправлен в ISO для стандартизации. Хватит спрашивать каждые 5 минут!   -  person Yakk - Adam Nevraumont    schedule 25.03.2017
comment
Компилятору достаточно информации для определения правильного типа. Я думаю. Зачем нужен конструктор?   -  person xmllmx    schedule 25.03.2017
comment
Компилятор не вправе решать, когда у него достаточно информации, а когда нет. Стандарт говорит, что вам нужен конструктор, но у вас его нет, поэтому вы получаете сообщение об ошибке.   -  person n. 1.8e9-where's-my-share m.    schedule 25.03.2017
comment
Мне просто интересно: почему стандарт не применяет то же правило к такому распространенному случаю.   -  person xmllmx    schedule 25.03.2017