[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#459151: Code using <iostream> and -fno-rtti -finline-functions no longer compiles



Package: libstdc++6-4.2-dev
Version: 4.2.2-5
Severity: important

This revision includes r130944 of branches/gcc-4_2-branch which, among other
things, changes use_facet in libstdc++-v3/include/bits/locale_facets.tcc to use
dynamic_cast.

This breaks programs that use <iostream> and compile with -fno-rtti
and -finline-functions (e.g. see #459031)

Here is a simple program that demonstrates the problem:


#include <iostream>

int main(void)
{
    std::cout << 42;
    return 0;
}


This compiles ok with 4.2.2-4 but fails with 4.2.2-5:

% g++ -fno-rtti -finline-functions -c test.cc
/usr/include/c++/4.2/bits/locale_facets.tcc: In function 'const _Facet& std::use_facet(const std::locale&) [with _Facet = std::numpunct<char>]':
/usr/include/c++/4.2/bits/locale_facets.tcc:193:   instantiated from 'void std::__numpunct_cache<_CharT>::_M_cache(const std::locale&) [with _CharT = char]'
/usr/include/c++/4.2/bits/locale_facets.tcc:146:   instantiated from 'const std::__numpunct_cache<_CharT>* std::__use_cache<std::__numpunct_cache<_CharT> >::operator()(const std::locale&) const [with _CharT = char]'
/usr/include/c++/4.2/bits/locale_facets.tcc:985:   instantiated from '_OutIter std::num_put<_CharT, _OutIter>::_M_insert_int(_OutIter, std::ios_base&, _CharT, _ValueT) const [with _ValueT = long int, _CharT = char, _OutIter = std::ostreambuf_iterator<char, std::char_traits<char> >]'
/usr/include/c++/4.2/bits/locale_facets.tcc:1255:   instantiated from '_OutIter std::num_put<_CharT, _OutIter>::do_put(_OutIter, std::ios_base&, _CharT, long int) const [with _CharT = char, _OutIter = std::ostreambuf_iterator<char, std::char_traits<char> >]'
/usr/include/c++/4.2/bits/locale_facets.h:2345:   instantiated from '_OutIter std::num_put<_CharT, _OutIter>::put(_OutIter, std::ios_base&, _CharT, long int) const [with _CharT = char, _OutIter = std::ostreambuf_iterator<char, std::char_traits<char> >]'
/usr/include/c++/4.2/bits/ostream.tcc:78:   instantiated from 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::_M_insert(_ValueT) [with _ValueT = long int, _CharT = char, _Traits = std::char_traits<char>]'
/usr/include/c++/4.2/bits/ostream.tcc:112:   instantiated from 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]'
foo.cc:5:   instantiated from here
/usr/include/c++/4.2/bits/locale_facets.tcc:118: error: 'dynamic_cast' not permitted with -fno-rtti


Regards,
Stelios.

-- 

Stelios Bounanos
perl -e 'print+reverse"t\nney.ttno\@esb"=~/(..)/sg'     #key: 0xE88A7F61

Please use the address above to email me from non-debian.org domains.



Reply to: