Здравствуйте, σ, Вы писали:
σ>То чувство, когда притащил код с демонстрацией тонкостей плюсов, но не отличаешь Гоголя от Гегеля rvalue от rvalue reference
Зачем вот эта вот язвительность, недружелюбность, что это тебе дает?
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, σ, Вы писали:
BFE>>А разве это не rvalue ссылка которая преобразуется к обычной ссылке? σ>То чувство, когда притащил код с демонстрацией тонкостей плюсов, но не отличаешь Гоголя от Гегеля rvalue от rvalue reference
Это точно. Пользуясь случаем спрошу: rvalue от rvalue reference отличается?
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, σ, Вы писали:
BFE>>>А разве это не rvalue ссылка которая преобразуется к обычной ссылке? σ>>То чувство, когда притащил код с демонстрацией тонкостей плюсов, но не отличаешь Гоголя от Гегеля rvalue от rvalue reference
BFE>Это точно. Пользуясь случаем спрошу: rvalue от rvalue reference отличается?
Да. rvalue это такой класс выражений, rvalue reference — это вид ссылок.
Здравствуйте, B0FEE664, Вы писали:
BFE>Это точно. Пользуясь случаем спрошу: rvalue от rvalue reference отличается?
Следует различать три разных сущности: rvalue-выражение, временный объект и rvalue-ссылка. Которые обычно и появляются вот прямо в такой последовательности, как перечислено. Ссылка, любая, предполагает наличие объекта. Обратное не верно: объекты вполне могут существовать и без ссылок на них. rvalue-выражения могут материализовываться во временные объекты.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, σ, Вы писали:
BFE>>Это точно. Пользуясь случаем спрошу: rvalue от rvalue reference отличается? σ>Да. rvalue это такой класс выражений,
Точно выражений, а не их результата?
σ>rvalue reference — это вид ссылок.
Что изменится от того, если рассматривать всякое rvalue как имеющее rvalue reference, которая не присутствует в коде явно?
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, σ, Вы писали:
R>>>rvalue-выражения могут материализовываться σ>>Не могут: https://github.com/cplusplus/draft/pull/2320
R>Ну это уже какие-то изменения. В более старой редакции было написано, что могут
R>
R>15.2 Temporary objects
R>1 Temporary objects are created
R>(1.1) — when a prvalue is materialized so that it can be used as a glvalue (7.4),
R>Но я, честно говоря, пока не въехал, с чем связана такая коррекция. Буду благодарен, если прокомментируешь.
С тем, что писать "prvalue is materialized" некорректно (даже если это в примечании), материализуются объекты, а не выражения.
Здравствуйте, rg45, Вы писали:
R>Как мне кажется, здесь избыточная сложность примера мешает взглянуть в корень. Упрощаем, насколько это возможно. Начинаем с работающего варианта: R>https://wandbox.org/permlink/XSlvNSjYEOCapn2o
Тогда вопросы:
1) почему wandbox оказался параноидальнее ideone?
2) почему ideone смягчает свои нравы, если заменить обычную функцию на конструктор?
3) почему ideone смягчает свои нравы и с обычной функцией
void f(const int& v) {} // нет использования - нет проблемыint main() { f(A::value); }
void f(const int& v) { cout << v << endl; } // есть использование - есть проблемаint main() { f(A::value); }
int f(const int& v) { cout << v << endl; return 0; } // есть использование...int main() { f(A::value); } // ... есть проблемаint main() { return f(A::value); } // ... нет проблемы
Что за механизм тут задействован, позволяющий или препятствующий инлайнить значение статической константы-члена?
Здравствуйте, Кодт, Вы писали:
К>Тогда вопросы: К>1) почему wandbox оказался параноидальнее ideone? К>2) почему ideone смягчает свои нравы, если заменить обычную функцию на конструктор? К>3) почему ideone смягчает свои нравы и с обычной функцией К>Что за механизм тут задействован, позволяющий или препятствующий инлайнить значение статической константы-члена?
Я думаю, что все это погрешности реализации, которые неминуемо присутствуют в любых компиляторах. Вряд ли стоит искать здесь какую-то систему и более сложное объяснение.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, σ, Вы писали:
R>>Я думаю, что все это погрешности реализации, которые неминуемо присутствуют в любых компиляторах.
σ>Я думаю, это нарушение правила, для которого no diagnostic required.
Ну а нарушение правила нельзя рассматривать как погрешность реализации?
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, σ, Вы писали:
R>>>Я думаю, что все это погрешности реализации, которые неминуемо присутствуют в любых компиляторах.
σ>>Я думаю, это нарушение правила, для которого no diagnostic required.
R>Ну а нарушение правила нельзя рассматривать как погрешность реализации?
Правило нарушает не реализация, а транслируемый C++-код. И реализация не обязана детектировать нарушение.
Здравствуйте, σ, Вы писали:
R>>Ну а нарушение правила нельзя рассматривать как погрешность реализации?
σ>Правило нарушает не реализация, а транслируемый C++-код. И реализация не обязана детектировать нарушение.
Ну если нам больше нечем заняться, кроме как словесным онанизмом, то более правильным выражением было бы что-то вроде: "погрешности в реализации приводят к нарушению правила...". Рассуждать об обязанностях неодушевленной субстанции несколько странно
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, σ, Вы писали:
R>>>Ну а нарушение правила нельзя рассматривать как погрешность реализации?
σ>>Правило нарушает не реализация, а транслируемый C++-код. И реализация не обязана детектировать нарушение.
R>Ну если нам больше нечем заняться, кроме как словесным онанизмом, то более правильным выражением было бы что-то вроде: "погрешности в реализации приводят к нарушению правила...".
Не было бы.
R> Рассуждать об обязанностях неодушевленной субстанции несколько странно
Я так не считаю. И стандарт тоже. > No translation unit shall contain more than one definition of any variable, function, class type, enumeration type, or template. > Every program shall contain exactly one definition of every non-inline function or variable that is odr-used in that program outside of a discarded statement; no diagnostic required.
Здравствуйте, σ, Вы писали:
σ>Не было бы.
Было бы.
σ>Я так не считаю.
А я считаю.
σ>>Правило нарушает не реализация, а транслируемый C++-код. И реализация не обязана детектировать нарушение.
И стандарт тоже. >> No translation unit shall contain more than one definition of any variable, function, class type, enumeration type, or template. >> Every program shall contain exactly one definition of every non-inline function or variable that is odr-used in that program outside of a discarded statement; no diagnostic required. σ>И т.д.
Отучаемся говорить за других. Берем переводчик, переводим свои слова и сравниваем с тем, что написано.
--
Не можешь достичь желаемого — пожелай достигнутого.
σ>>Не было бы. R>Было бы. σ>>Я так не считаю. R>А я считаю.
σ>>>Правило нарушает не реализация, а транслируемый C++-код. И реализация не обязана детектировать нарушение.
R>И стандарт тоже. >>> No translation unit shall contain more than one definition of any variable, function, class type, enumeration type, or template. >>> Every program shall contain exactly one definition of every non-inline function or variable that is odr-used in that program outside of a discarded statement; no diagnostic required. σ>>И т.д.
R>Отучаемся говорить за других.
Это вообще к чему?
R> Берем переводчик, переводим свои слова и сравниваем с тем, что написано.
Какие именно слова надо сравнивать? Я привёл цитаты из стандарта просто для примера рассуждения об обязанностях неодушевлённых предметов.
Но таки да, вторая цитата — это нарушаемое правило. Только я всё равно не пойму, что ты так возбудился. Из-за того, что я написал "транслируемый C++-код", а в стандарте сказано "программа"?