Глядя на другой вопрос, я понял, что не могу использовать объекты или функции из анонимного пространства имен через заголовочный файл, поскольку это приведет к нарушениям ODR в определениях классов или встроенных функциях. Если это так, то можно ли безопасно использовать именованные объекты const
или constexpr
static
в inline
функциях или классах? Например, если бы CONSTANT
было внутри namespace
ниже, это было бы небезопасно, но можно ли использовать константу со статической связью?
// some header file to be included by multiple .cpp files
static const/*expr*/ int CONSTANT = 2;
inline int f() {
return CONSTANT;
}
class Cls {
int mem = CONSTANT;
};
using CONSTANT = std::integral_constant<int, 2>;
- person Barry   schedule 14.12.2016static constexpr inline CONSTANT = 2;
- person Barry   schedule 14.12.2016static constexpr inline int CONSTANT = 2;
- person M.M   schedule 14.12.2016inline
будет избыточным. Также я не вижу, где изменения в этом документе сделали бы код больше не нарушением ODR. - person M.M   schedule 14.12.2016int
- person Barry   schedule 14.12.2016static inline
не имеет никакого смысла. Простоinline
. И тогда, поскольку у него есть внешняя связь, все случаи использования имени будут относиться к одной и той же переменной. - person T.C.   schedule 14.12.2016