Является ли неопределенным поведением наличие разных определений встроенной функции?

Минимальный код:

// --------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().

Независимо от того, должно это быть закодировано или нет, мой вопрос:
Является ли это хорошо определенным или неопределенным поведением?

9
задан iammilind 26 June 2012 в 04:31
поделиться