Почему следующая программа выводит 1 0, хотя вроде бы одинаковые проверки?
#include <iostream>
#include <type_traits>
int main() {
std::cout << std::is_copy_assignable<int>() << std::endl << std::is_assignable<int, int>();
}
std::is_assignable<int, int> проверяет(без выполнения), будет ли корректным выражение
::std::declval<int>() = ::std::declval<int>()
int x{}; int y{}; ::std::move(y) = ::std::move(x); // не работает
Это выражение некорректно, так как слева должно быть l-value
А std::is_copy_assignable<int>() выдает результат аналогичный
::std::is_assignable<int &, int const &>
::std::declval<int &>() = ::std::declval<int const &>()
int const x{}; int y{}; y = x; // работает
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники