Минимальный код:
// --------inline.h--------
struct X {
static inline void foo ();
};
#ifdef YES
inline void X::foo () { cout << "YES\n"; }
#else
inline void X::foo () { cout << "NO\n"; }
#endif
// --------file1.cpp--------
#define YES // <----
#include"inline.h"
void fun1 ()
{
X::foo();
}
// --------file2.cpp--------
#include"inline.h"
void fun2 ()
{
X::foo();
}
Если мы вызовем fun1()
и fun2()
, то они будут печатать YES
и NO
соответственно, что означает, что они ссылаются на разные тела функций одного и того же X::foo()
.
Независимо от того, должно это быть закодировано или нет, мой вопрос:
Является ли это хорошо определенным или неопределенным поведением?