What is the intersection of rootcint with the standard c++ language? I’ve pored through the documentation, but cannot seem to find any exact specification pertaining to what constitutes valid rootcint input AND ISO c++. Any links to extant docs would be enormously helpful.
Of particular interest to me and my applications:
[ul]
[li]exceptions, throwing and catching thereof[/li]
[li]inheritance, especially multiple with qualified access[/li]
[li]templates and specializations thereof[/li]
[li]function objects[/li][/ul]
Well, certain aspects of inheritance don’t quite behave as advertised…
/* inheritance.hpp */
namespace N
{
struct A
{
int foo( int n ){ return ++n; }
};
struct B
{
int foo( int n ){ return ++n; }
B( void ){}
virtual ~B( void ){}
};
struct D
:private B
{
using B::foo;
D( void ){}
};
}
/* test.cpp */
int ret;
N::A a;
ret = a.foo( 42 );
std::cout
<< "a.foo( 42 ) == "
<< std::dec << ret
<< std::endl
;
N::B b = N::B();
ret = b.foo( 42 );
std::cout
<< "b.foo( 42 ) == "
<< std::dec << ret
<< std::endl
;
N::D d = N::D();
ret = d.foo( 42 );
std::cout
<< "d.foo( 42 ) == "
<< std::dec << ret
<< std::endl
;
return 0;
…gives the following error message:
$ root -l -q test.cpp
root [0]
Processing test.cpp...
a.foo( 42 ) == 43
Error: class,struct,union or type unknown B not defined test.cpp:32:
*** Interpreter error recovered ***
Did I miss something about base class access and/or the “using” directive?