ODR violation via overload resolution
suggest changeEven with identical tokens for inline functions, ODR can be violated if lookup of names doesn’t refer to the same entity. let’s consider func
in following:
- header.h
void overloaded(int);
inline void func() { overloaded('*'); }
- foo.cpp
#include "header.h"
void foo()
{
func(); // `overloaded` refers to `void overloaded(int)`
}
- bar.cpp
void overloaded(char); // can come from other include
#include "header.h"
void bar()
{
func(); // `overloaded` refers to `void overloaded(char)`
}
We have an ODR violation as overloaded
refers to different entities depending of the translation unit.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents