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