Вывод аргумента шаблона, похоже, не работает в Clang 6 для временных объектов.
g ++ 8.1.0 компилирует и запускает пример правильно.
Clang 6.0.0 и 6.0.2 обе ошибкив указанной строке с этим сообщением:
error: expected unqualified-id
Print{1,"foo"s,2}; /********** Broken in Clang **********/
Все остальные строки работают правильно.
Поведение одинаково в обоих случаях, используется ли -std=c++17
или -std=c++2a
.
Страница состояния Clang c ++ указывает, что вычитание аргумента шаблона было реализовано с Clang 5 (P0091R3, P0512R0).
Это ошибка?Существуют ли обходные пути (например, флаги компилятора, , а не изменения кода )?
пример:
template<class ...Ts>
void print(Ts...ts){ (( cout << ... << ts )); }
template<class ...Ts>
struct Print {
Print(Ts...ts){ (( cout << ... << ts )); }
};
int main(){
Print{1,"foo"s,2}; /********** Broken in Clang **********/
Print<int,string,int>{1,"foo"s,2};
auto p1 = Print{1,"foo"s,2};
Print p2{1,"foo"s,2};
print(1,"foo"s,2);
}