Size: a a a

2020 August 29

D

Danya in supapro.cxx
struct N {
 constexpr N() {}
 N(N const&) = delete;
};

template <typename T>
consteval void assert_copyable()
{
   T t;
   T t2 = t;
}

using check = decltype(assert_copyable<N>());
источник

D

Danya in supapro.cxx
Danya
struct N {
 constexpr N() {}
 N(N const&) = delete;
};

template <typename T>
consteval void assert_copyable()
{
   T t;
   T t2 = t;
}

using check = decltype(assert_copyable<N>());
Должно ли компилироваться?
Анонимный опрос
36%
Да
36%
Нет
27%
UB
Проголосовало: 22
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
Было бы нет, если бы
T t2 {t};
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
(подозреваю)
источник

D

Danya in supapro.cxx
А в чем разница-то?
Что там, что там — копи конструктор вызывает
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
То есть разницы между copy assignment & copy construct нет?
тогда был бы не The rule of three/five/zero, а The rule of three/zero
источник

VR

Vladyslav Ryuzaki in supapro.cxx
ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‎
То есть разницы между copy assignment & copy construct нет?
тогда был бы не The rule of three/five/zero, а The rule of three/zero
Дык первый вызывается на уже существующем объекте
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
🤔
источник

VR

Vladyslav Ryuzaki in supapro.cxx
Типа

T t2;
t2 = t;
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
worth to be checked
источник

D

Danya in supapro.cxx
ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‎
То есть разницы между copy assignment & copy construct нет?
тогда был бы не The rule of three/five/zero, а The rule of three/zero
 T t2 = t;

Это всегда был и есть и будет вызов копи конструктора
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
проверил
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
не прав был
источник

ПК

Побитый Кирпич... in supapro.cxx
Danya
struct N {
 constexpr N() {}
 N(N const&) = delete;
};

template <typename T>
consteval void assert_copyable()
{
   T t;
   T t2 = t;
}

using check = decltype(assert_copyable<N>());
Вангую, что тип можно вывести без вычисления функции, поэтому компилится)
источник

ПК

Побитый Кирпич... in supapro.cxx
Какой правильный ответ?
источник

D

Danya in supapro.cxx
Побитый Кирпич
Какой правильный ответ?
Насколько я понимаю, правильный ответ No
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in supapro.cxx
Побитый Кирпич
Вангую, что тип можно вывести без вычисления функции, поэтому компилится)
а при чем тут вычисление типа?
источник

D

Danya in supapro.cxx
Потому что decltype вычисляет тип
источник

ПК

Побитый Кирпич... in supapro.cxx
Потому что он тут вычисляется
источник

ПК

Побитый Кирпич... in supapro.cxx
Danya
Насколько я понимаю, правильный ответ No
Тогда не понятно в чем прикол с consteval
источник