Когда x не используется odr?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Когда x не используется odr?

Сообщение Anonymous »

В стандарте C++
Использование N4993 (Примечание: это не текущий стандарт, но он достаточно близок к этому обсуждению).
В разделе «6.3 Правило одного определения [basic.def.odr]»
Пункт 5:

A переменная называется выражением, если выражение является id-выражение, которое его обозначает. Переменная x, имя которой указано в потенциально вычисляемом выражении E, используется E в odr, за исключением случаев, когда
(5.1) -- x является ссылкой, которую можно использовать в константных выражениях (7.7), или
(5.2) -- x — переменная нессылочного типа, которая может использоваться в константных выражениях и не имеет изменяемых подобъектов, а E — элемент множества потенциальных результатов выражение неклассовый тип с энергонезависимой квалификацией, к которому применяется преобразование lvalue-to-rvalue (7.3.2), или
(5.3) -- x — это переменная не-класса, ссылочный тип, а E — это элемент набора потенциальных результатов выражения отброшенного значения (7.2.3), к которому не применяется преобразование lvalue в rvalue.

И

Если локальная сущность используется odr в декларативной области, в которой она
непригодна для использования odr, программа неправильно сформирована.

Рассмотрим следующий код

Код: Выделить всё

#include 
using namespace std;

struct A
{
public:
int data;
constexpr   A() { data = 0; }
constexpr   A(const int& n) :data(n) {}

friend ostream& operator

Подробнее здесь: [url]https://stackoverflow.com/questions/79252600/when-is-x-not-odr-used[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»