Понятно, что изменение смысла auto
от одного стандарта к другому приводит к возможности ошибки, или, наоборот, ошибочный из-за >>
в шаблоне код становится нормальным.
А есть код, который при переходе от стандарта С++03 к С++11 (ну, или 14) меняет свой смысл? Работает и там и там но дает разные результаты?
Или даже в С++17? Короче, от одного какого-то стандарта к другому?
В конце стандарта есть приложение "Совместимость", в котором перечислены все несовместимости с предыдущими стандартами.
Раздел про совместимость текущего стандарта и С++03
Несовместимостей много. Вот первая по списку:
#define u8 "abc"
const char* s = u8"def"; // Раньше "abcdef", теперь "def"
Я не такой талант, чтоб придумать настолько тонкое свое, так что "постою на плечах гигантов" (с) Ньютон :)
В "C++ Templates" Вандевурда и компании есть такой пример:
#include <iostream>
template<int I> struct X
{
static int const c = 2;
};
template<> struct X<0>
{
typedef int c;
};
template<typename T> struct Y
{
static int const c = 3;
};
static int const c = 4;
int main()
{
std::cout << (Y<X<1> >::c >::c >::c) << ' ';
std::cout << (Y<X< 1>>::c >::c >::c) << '\n';
}
Результаты работы в старом и новом стандартах: https://ideone.com/kQi07Y и https://ideone.com/6l8ckM
Идея понятна?
Y<X< 1>>::c >::c >::c
- в старом стандарте 1 сдвигаем на глобальную c
, получаем 0, Y<X<0>::c>
дает Y<int>
, ну а Y<int>::c
- это 3.
В новом стандарте Y<X<1>>::c
равно 3, дальше сравниваем с глобальной c
, равной 4, получаем false
, опять сравниваем с глобальной c
, получаем 0>4 == false
, выводится 0...
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Дано два файла, нужно переписать содержимое одного в другойПри этом надо переписывать по 1024 байта
Есть класс, который хранит в себе двумерный массив QVector(Аналог std::vector в Qt)
Вставьте в двумерный массив столбец из нулей после столбца с номером KKВ первой строке даны числа NN, MM и KK (1≤N,M,K≤5001≤N,M,K≤500; K≤MK≤M) — количество...