False errors when include a system header file in ifdef
Closed this issue · 2 comments
mayshukla commented
For example:
#ifdef A
#include <iostream>
#endif
Output:
In file included from iostream_in_ifdef.cpp:3:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/iostream:38:
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/x86_64-pc-linux-gnu/bits/c++config.h:236:1: error: expected unqualified-id
namespace std
^
In file included from iostream_in_ifdef.cpp:3:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/iostream:39:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ostream:38:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ios:39:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/exception:144:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/nested_exception.h:40:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/move.h:55:
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/type_traits:277:14: error: true_type is not defined in context ~A
: public true_type { };
^
In file included from iostream_in_ifdef.cpp:3:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/iostream:39:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ostream:38:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/ios:42:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/ios_base.h:41:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/locale_classes.h:40:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/string:52:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/basic_string.h:6626:
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:169:3: error: __hash_base is not defined in context ~A
_Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0)
^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:31: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
struct hash<_Tp> : public __hash_base<size_t, _Tp> \
^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:169:3: error: size_t is not defined in context ~A
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:43: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
struct hash<_Tp> : public __hash_base<size_t, _Tp> \
^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:170:3: error: __hash_base is not defined in context ~A
_Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0 unsigned)
^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:31: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
struct hash<_Tp> : public __hash_base<size_t, _Tp> \
^
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:170:3: error: size_t is not defined in context ~A
/usr/lib64/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../include/c++/8.3.0/bits/functional_hash.h:116:43: note: expanded from macro '_Cxx_hashtable_define_trivial_hash'
struct hash<_Tp> : public __hash_base<size_t, _Tp> \
^
6 errors generated.
There should be no errors since all of <iostream>
is included in the same context.
mayshukla commented