А если: #define MAKE_VAR(a,b) auto a = b MAKE_VAR(i, 0); ---- А
почему тогда статическая типизация ломается в таком (к примеру)
выражении auto i = std::vector{1};
?
----
Вы ведь не сможете потом этой переменной присвоить что-то кроме vector<int>, не сможете запихнуть в этот вектор что-то кроме других int. Да, в векторе не пишется впрямую что он может работать с int или чем-то еще. Но язык не гарантирует что какой-то шаблон будет работать с любыми типами, он может быть очень избирательным и работать хоть строго с одним. Шаблон это отнюдь не компилируемый код до тех пор пока он не будет специфицирован, примерно как и макросы, только по другому.