Вопросы по теме 'one-definition-rule'

Статическая переменная в заголовочном файле
Статическая переменная имеет файловую область. Скажем, у меня есть два следующих файла: файл1.h файл1.cpp файл2.h файл2.cpp Я объявил статическую переменную, скажем, static int Var1 в обоих файлах заголовков. И file1.h , и...
38899 просмотров
schedule 04.04.2022

Нарушение ODR, когда поиск имени находит другое объявление
Я думал о следующем. Рассмотрим два файла: A.cpp: template<class T> void g(T) {} inline void f() { g(1); } Б.цпп: template<class T> void g(T) {} void g(int) {} inline void f() { g(1); } Без void g(int) {} эта...
420 просмотров
schedule 22.12.2023

Что мне разрешено делать со статическим, constexpr, членом данных, инициализированным в классе?
Вероятно, это немного необычный вопрос, поскольку он требует более полного объяснения короткого ответа на еще один вопрос и некоторые связанные с ним аспекты стандарта C++11. Для простоты ссылки я подытожу упомянутый вопрос здесь. ОП определяет...
1378 просмотров

constexpr и ODR
Если у нас есть файл заголовка widget.hpp со следующим содержанием: constexpr int foo = 10; struct widget { int bars[foo]; }; ... и у нас есть две единицы перевода, созданные из двух исходных файлов, оба из которых включают только...
1979 просмотров
schedule 30.11.2023

глобальный std::string и одно правило определения
У меня есть заголовочный файл, содержащий следующее определение const std::string error[] = {"a", "b"}; Теперь я включаю этот файл в две разные единицы перевода и компилирую исходные коды. Все работает, но почему? Ожидается, что это сломает...
3455 просмотров
schedule 30.09.2022

Что означает это предложение в параграфе §3.2/2 стандарта C++11?
Предложение является частью параграфа §3.2/2: Переменная, имя которой появляется как потенциально вычисляемое выражение, используется odr, если это не объект, который удовлетворяет требованиям для появления в постоянном выражении (5.19) и...
318 просмотров

Почему ODR не нарушается, если взять адрес встроенной статической константной целочисленной переменной-члена?
Нечто подобное было бы очевидным нарушением правила одного определения С++, если бы оно скомпилировалось: // Case 1 // something.h struct S {}; struct A { static const S val = S(); }; потому что, если что-то.h будет включено более чем в...
194 просмотров

GoogleTest PrintЧтобы вас не вызывали на занятия
У меня возникла довольно странная проблема: я говорю googletest распечатать определенный класс так, как я хочу, используя PrintTo. Класс представляет собой очень простую 2D-точку, она находится в пространстве имен, и функция PrintTo находится в том же...
3359 просмотров
schedule 22.05.2024

Что означает подчиняться ODR в случае встроенных функций и функций constexpr?
Я только что прочитал, что constexpr и встроенные функции подчиняются правилу одного определения, но их определение должно быть идентичным. Вот и пробую: inline void foo() { return; } inline void foo() { return; } int main() {...
304 просмотров

Обратная совместимость ресурсов iOS9 On Demand (ODR)
Ресурсы по требованию (iOS) Ресурсы по требованию — это ресурсы, такие как изображения и звуки, которые можно пометить ключевыми словами и запросить в группах по тегам. App Store размещает ресурсы на серверах Apple и управляет загрузками...
2144 просмотров

Есть ли способ обнаружить нарушения ODR встроенной функции?
Итак, у меня есть этот код в двух отдельных единицах перевода: // a.cpp #include <stdio.h> inline int func() { return 5; } int proxy(); int main() { printf("%d", func() + proxy()); } // b.cpp inline int func() { return 6; } int proxy() {...
3564 просмотров

Гарантированно ли, что меня не укусит это нарушение ODR?
У меня есть заголовочный файл, который объявляет шаблон со статической переменной, а также определяет его: /* my_header.hpp */ #ifndef MY_HEADER_HPP_ #define MY_HEADER_HPP_ #include <cstdio> template<int n> struct foo { static...
299 просмотров
schedule 27.06.2022

Ошибка ODR в MSVC?
Эта программа печатает 1 1 вместо 1 2 при компиляции с помощью MSVC (до VS 2015). f1.cpp: #include <functional> static std::function<int ()> helper() { struct F { int operator()() { return 1; } }; return F(); }...
354 просмотров
schedule 08.10.2023

Компиляция встроенной функции
Я намерен обеспечить простые обертки для операционной системы API, которые бросают исключения, когда ошибки случаются. Эти обертки просты, и все они определяются как встроенные функции в заголовом файле. Поскольку System API должен быть большой,...
1172 просмотров

использование констант в заголовочном файле с соответствием ODR
Глядя на другой вопрос , я понял, что не могу использовать объекты или функции из анонимного пространства имен через заголовочный файл, поскольку это приведет к нарушениям ODR в определениях классов или встроенных функциях. Если это так, то можно...
693 просмотров
schedule 08.01.2023

Продолжение никак не могу понять DR 712
Это в основном продолжение моего предыдущего вопроса о DR 712. Позвольте мне сначала объяснить, почему я настаиваю на том, чтобы посмотреть на что-то это можно было бы считать старым стандартом C++11, но моя проблема в том, что раздел...
277 просмотров

Зависимое выражение и использование ODR в Generic Lambda в C++14
void f( int , const int (&)[2] = {}) { } // #1 void f( int , const int (&)[1] ) { } // #2 // void f(const int&, const int (&)[1] ) { } // #2_original void test() { const int x = 17; auto g =...
248 просмотров
schedule 02.01.2023

Нарушение ODR в GCC 6.3.0 с типами, определенными в двух отдельных единицах трансляции
В следующем примере кода мы наблюдаем странное поведение в GCC. Странным поведением является нарушение ODR в GCC 6.3.0 с типами, определенными в двух отдельных единицах трансляции. Возможно, это связано с определениями рекурсивных типов или...
492 просмотров
schedule 09.08.2022

Как избежать нарушения ODR с классами признаков
При чтении кода онлайн из производственных библиотек я нашел что-то вроде этого Traits.hpp template <typename Type> class Traits { template <typename T, detail::EnableIfIsInstantiation<T, Type>* =...
153 просмотров
schedule 21.01.2023

Нарушение ODR со специализациями шаблона
У нас есть заголовочный файл, который содержит некоторые остатки для различных значений точности с плавающей запятой: template <typename T> struct rsdTarget { static const double value; }; template <> const double...
407 просмотров
schedule 05.09.2022