In the Google C++ Style Guide, the Namespaces section states that " Use of unnamed namespaces in header files can easily cause violations of the C++ One Definition Rule (ODR). " I understand why not using unnamed namespaces in an implementation file can cause ODR-violations, but not how use in a header can do so. How can this cause a violation? The reason is that if you actually use anything in the anonymous namespace, you risk undefined behavior. For example: namespace { double const pi = 3.14159; } inline double twoPiR( double r ) { return 2.0 * pi * r; } The rule for inline functions (and