Is it O.K. to define virtual function of class template outside its body? Virtual function can not be inlined, but to avoid multiple definitions in compilation units they shall be marked inline (assuming that template headers will be included in multiple source files). On the other hand compiler is free to ignore inline, so this seems valid. By an example, is the code below correct:
template <typename T>
class C
{
public:
virtual void f(T val);
};
template <typename T>
inline
void C<T>::f(T val)
{
//definition
}
?
BTW gcc (3.4.2) allows to omit inline before definition of function f(T val) but not before analogous function of regular class. Is it only gcc’s behaviour?
Yes, it’s OK even without
inline. It works the same for ordinary member functions and static variables:Standard quote: (3.2/5)
The requirements basically say the two definitions have to be identical.
It doesn’t work in case of regular classes. There has to be at most one definition in the whole program.