Templates and generic programming
T.68
Используйте `{}` вместо `()` внутри шаблонов во избежание неоднозначностей
Причина
() уязвим к грамматическим неоднозначностям.
Пример
template<typename T, typename U>
void f(T t, U u)
{
T v1(T(u)); // ошибка: v1 оказывается функцией, а не переменной
T v2{u}; // ясно: очевидно переменная
auto x = T(u); // неясно: конструирование или приведение?
}
f(1, "asdf"); // плохо: приведение из const char* в int
Контроль
- Помечать инициализаторы
() - Помечать приведения в стиле вызова функции