>> There is a solution to that: the compiler, knowing that foo::bar is
>> not an inline function, it does not inline the function but it
>> automatically compiles the relevant symbol in the foo.o object file.
>
> Which is a change to the language semantics!

The compiler can inline the trivial member functions and leave the
rest as is. Although technically it is a change in language semantics,
it's a very minor change, that I doubt will have anyone worried.

Look at the benefit of not having to create headers though...for me,
it's a good trade off.

> A change to how the compiler processes the source code is a change to
> the language.  The rules on template instantiation, inline functions,
> symbol visibility, inline namespaces etc. would probably all be
> affected.

I do not see how anything else other than inlining is to be affected.

Care to show an example?

>
> You also don't seem to have considered header dependencies.  If
> foo.cpp #includes ten files, some of which are needed for the
> interface and some for the implementation, how many of them should be
> copied to foo.hpp by your "simple" copy'n'paste?  Should the compiler
> analyse which headers are needed just for the interface declarations,
> and only include those headers?  Or auto-generate forward-declarations
> of all the needed entities?
> Or just include all of them, even though some headers may only be
> needed for the implementations, resulting in namespace pollution in
> other translation units and possible ambiguities, conflicts, or
> dependency cycles?

All of them.

I'll take automatic generation of headers + increased compilation
times any day over manual generation of headers. New computers and
hard disks can always be purchased and are much cheaper than people.

If I encountered a problem with dependency cycles, then I would use
the old way of manually writing headers, which will still be
available.

Reply via email to