Templates and generic programming
T.68
Use `{}` rather than `()` within templates to avoid ambiguities
Reason
() is vulnerable to grammar ambiguities.
Example
template<typename T, typename U>
void f(T t, U u)
{
T v1(T(u)); // mistake: oops, v1 is a function, not a variable
T v2{u}; // clear: obviously a variable
auto x = T(u); // unclear: construction or cast?
}
f(1, "asdf"); // bad: cast from const char* to int
Enforcement
- flag
()initializers - flag function-style casts