Stdc++ rootcint intersection

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]

Hi,

All 4 are supported. See root.cern.ch/viewvc/trunk/cint/doc/limitati.txt

Cheers,
Philippe.

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?

Hi,

Indeed, the support for private inheritance and using statement is broken and should be added to the list of limitations.

Cheers,
Philippe.