C++ has a lot of complex moving parts; sometimes they interact in clean and intuitive ways, and sometimes they don't. Worse, sometimes when they don't, everything breaks spectacularly at compile-time with an error message (often simple and descriptive, but occasionally long and nightmarish and difficult to parse), but sometimes it doesn't, and you get a program that appears to work but that is incorrect in a subtle and potentially dangerous way, or that is correct but unstably so, and a tiny change might break functionality in a seemingly unrelated part of the code.
Sometimes C++ is just unintuitive.
struct X {
X() = delete;
};
auto x1 = X(); // error!
auto x2 = X{}; // perfectly fine
auto v1 = vector<int> (3, 2); // [2 2 2]
auto v2 = vector<int> {3, 2}; // [3 2]
struct Good { int i; };
struct Bad { const int i; };
auto good = new Good{5};
auto bad = new Bad{5};
new (good) Good{10};
new (bad) Bad{10};
do_something_with(*good); // perfectly fine
do_something_with(*bad); // undefined behavior!
template <typename T> void foo(T); // (1)
template <> void foo<int*>(int*); // (2)
template <typename U> void foo(U*); // (3)
int i;
foo(&i); // calls foo<int> overload (3) —
// not foo<int*> specialization (2)!
Про первую не знал, но нашел ответ тут(первые два ответа):
https://stackoverflow.com/questions/33988297/deleted-default-constructor-objects-can-still-be-created-sometimesВ с++14 от части поправили один баг, а в остальном, люди просто не читали доки(я тоже, каюсь) к {} и чем он является
Про вектор- признаю,лишь раз накосячил и потом запомнил. А вот в случае темплэйтов - это больше из разряда ненормального программирования. Я бы такое не написал.
Не могу сказать что это нормально и что это удобно, но с другой стороны, эти случаи всплывают редко(говорю только из собственного опыта и проектах в которых участвовал). В тоже время, в других языках тоже есть своя "магия" и тоже есть случаи в которых надо искать проблему днями. Может с++ и позволяет легче "отстрелить" ногу особыми случаями, но в повседневном обычном использовании таких проблем нет