This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libstdc++/36427] New: std::ios_base::open_mode is defined but useless


I think this is a bug (and know it's annoying). Thanks for investigating.

In the libstdc++ included with gcc-4.2.6 (apparently also in trunk),
bits/ios_base.h defines two "open mode" types: std::ios_base::openmode is a
typedef of _Ios_Openmode, whereas std::ios_base::open_mode is a typedef of int.
I'm guessing that the latter was defined for compatibility with compilers like
MSVC that would let you use the two synonymously. However, it doesn't work:

~ $ cat > test.cpp <<EOF
> #include <fstream>
> int main()
> {
> std::ios_base::open_mode m = std::ios_base::in;
> std::fstream f(__FILE__, m);
> }
> EOF
~ $ g++ -v test.cpp
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: /var/tmp/portage/sys-devel/gcc-4.2.4/work/gcc-4.2.4/configure
--prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.2.4
--includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.2.4/include
--datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.4
--mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.4/man
--infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.4/info
--with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.2.4/include/g++-v4
--host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec
--enable-nls --without-included-gettext --with-system-zlib --disable-checking
--disable-werror --enable-secureplt --disable-multilib --enable-libmudflap
--disable-libssp --disable-libgcj --with-arch=i686
--enable-languages=c,c++,treelang,fortran --enable-shared
--enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
Thread model: posix
gcc version 4.2.4 (Gentoo 4.2.4 p1.0)
 /usr/libexec/gcc/i686-pc-linux-gnu/4.2.4/cc1plus -quiet -v -D_GNU_SOURCE
test.cpp -quiet -dumpbase test.cpp -mtune=generic -march=i686 -auxbase test
-version -o /tmp/ccgqbb9I.s
ignoring nonexistent directory
"/usr/lib/gcc/i686-pc-linux-gnu/4.2.4/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i686-pc-linux-gnu/4.2.4/include/g++-v4
 /usr/lib/gcc/i686-pc-linux-gnu/4.2.4/include/g++-v4/i686-pc-linux-gnu
 /usr/lib/gcc/i686-pc-linux-gnu/4.2.4/include/g++-v4/backward
 /usr/local/include
 /usr/lib/gcc/i686-pc-linux-gnu/4.2.4/include
 /usr/include
End of search list.
GNU C++ version 4.2.4 (Gentoo 4.2.4 p1.0) (i686-pc-linux-gnu)
        compiled by GNU C version 4.2.4 (Gentoo 4.2.4 p1.0).
GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128021
Compiler executable checksum: 38f256a84cbf67f10c0ecc41dbb48f1d
test.cpp: In function â??int main()â??:
test.cpp:5: error: invalid conversion from â??intâ?? to
â??std::_Ios_Openmodeâ??
test.cpp:5: error:   initializing argument 2 of â??std::basic_fstream<_CharT,
_Traits>::basic_fstream(const char*, std::_Ios_Openmode) [with _CharT = char,
_Traits = std::char_traits<char>]â??
~ $ # Of course, the code works fine if openmode is used instead:
~ $ sed -i 's/open_mode/openmode/' test.cpp
~ $ g++ test.cpp
~ $ echo $?
0


-- 
           Summary: std::ios_base::open_mode is defined but useless
           Product: gcc
           Version: 4.2.5
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: justinb at math dot berkeley dot edu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36427


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]