Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: split 1st CS

...

Code Block
bgColor#ccccff
langcpp
// S.h
struct S {
  int a;
};
 
// a.cpp
#include "S.h"
 
// b.cpp
#include "S.h"

Compliant Solution

If the ODR violation was a result of accidental name collision, the best mitigation solution is to ensure that both class definitions are unique, as in this compliant solution:

...

For more information on the behavior of #pragma pack, see the vendor documentation for your implementation, such as Microsoft Visual Studio or GCC.

Compliant Solution

In this compliant solution, the implementation-defined structure member alignment directive is removed, ensuring that all definitions of S comply with the ODR:

...

Code Block
bgColor#FFcccc
langcpp
const int n = 42;
 
int g(const int &lhs, const int &rhs);
inline int f(int k) {
  return g(k, n);
}

Compliant Solution

A compliant solution must change one of three factors: it must not odr-use n within f(), it must declare n such that it has external linkage, or it must not use an inline definition of f().

...