AK
Size: a a a
AK
-
-
AK
KR
KR
KR
-
-
К
ЕР
P
-
P
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)!
L
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)!
-
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)!
PC
PC