From: Vladimir Prus (ghost_at_[hidden])
Date: 2006-03-14 02:59:30


Jo?o Abecasis wrote:

> Vladimir Prus wrote:
>> Hi,
>> the above two tests fail on a number of compilers with what looks like a
>> two-phase lookup issue. See:
>>
>> http://tinyurl.com/jeakp
>> http://tinyurl.com/q3hbv
>>
>> I can reproduce this locally with g++ 3.4. Can somebody check if this is
>> a bug in the library, or some quirk with g++ 3.4?
>
> Bugs in the implementation, related to two-phase lookup, I guess. These
> should now be fixed in CVS.

I am afraid, this still doesn't work, though with a different error:

gcc.compile.c++ ../../../bin.v2/libs/spirit/test/ast_calc_tests.test/gcc-3.4/debug/ast_calc_tests.o
In file included from ../../../boost/spirit/tree/tree_to_xml.hpp:108,
                 from ast_calc_tests.cpp:13:
../../../boost/spirit/tree/impl/tree_to_xml.ipp: In static member function
`static const wchar_t*
boost::spirit::impl::string_lit<wchar_t>::to_wchar_t(const char*)':
../../../boost/spirit/tree/impl/tree_to_xml.ipp:66: error: cannot convert
`const char*' to `const wchar_t*' in return

    "g++-3.4" -ftemplate-depth-100 -O0 -fno-inline -Wall -g -fPIC
-DBOOST_ALL_NO_LIB=1 -I"../../.." -c -o
"../../../bin.v2/libs/spirit/test/ast_calc_tests.test/gcc-3.4/debug/ast_calc_tests.o"
"ast_calc_tests.cpp"

I'm using up-to-date CVS as of now. The repeat_ast_test fails with the same
error.

Here's the code:

   static wchar_t const* to_wchar_t(..........)
   {
         return std::use_facet<ctype_t>(std::locale())
                .widen(source, source + len, result);
   }

The problem is that the 'widen' method always returns char*, and return
value is equal to the second parameter. I guess the right code would be:

         std::use_facet<ctype_t>(std::locale())
                .widen(source, source + len, result);
         return result;

but I'm not quite sure. Can you check if this works and is right
semantically?

Thanks,
Volodya