Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-06-03 05:26:59


Hello,
the program_options library fails one tests on EDG compilers (Intel, Como),
which a failure to deduce template arguments for a certain call. After reading
the standard for some time, I failed to understand the reason.

Below is the test program:

    
    char* cmdline3_[1] = {};
    
    template<class charT>
    void func(const charT* const argv[]) {}
    
    int main()
    {
        // P is 'const charT* const argv[]'cmdline3_
        // A is 'char* cmdline3_[]'
        //
        // According to 14.8.2.1/2
        // If P is not reference type
        // -If A is an array type, the pointer type produced
        // by the array-to-pointer standard convertion (4.2)
        // is used in place of A for type deduction.
        //
        // So, A should become 'char**'
        
        // The following does not compile.
        func(cmdline3_);
    
        char** p = cmdline3_;
        // This does compile, even though the argument type used for
        // type deduction should be the same as in example above.
        func(p);
    
    }
 
Anybody can explain what's going on?

TIA,
Volodya


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk