Quuxplusone / LLVMBugzillaTest

0 stars 0 forks source link

__bases and __direct_bases intrinsics are not supported (N2965) #23914

Open Quuxplusone opened 9 years ago

Quuxplusone commented 9 years ago
Bugzilla Link PR23915
Status NEW
Importance P normal
Reported by Alexey Frolov (alexfrolov1878@yandex.ru)
Reported on 2015-06-22 17:39:18 -0700
Last modified on 2017-04-26 07:15:27 -0700
Version trunk
Hardware PC Linux
CC ditaliano@apple.com, llvm-bugs@lists.llvm.org, tstellar@redhat.com, zilla@kayari.org
Fixed by commit(s)
Attachments
Blocks
Blocked by
See also
Clang cannot compile GCC header tr2/type_traits (see below).
Type traits "bases" and "direct_bases" were proposed as N2965 for C++11
standard, but were not included.
The feature is well-documented (see http://www.open-
std.org/jtc1/sc22/wg21/docs/papers/2009/n2965.html) and is supported by GCC.
There are some questions and requests regarding this feature on developer
forums (for example, http://stackoverflow.com/questions/18435001/what-is-the-
status-of-n2965-stdbases-and-stddirect-bases).

$ clang --version
clang version 3.7.0 (trunk)
Target: x86_64-unknown-linux-gnu
Thread model: posix

$ cat test.cpp
#include <tr2/type_traits>

$ clang -std=c++11 -c test.cpp
In file included from test.cpp:1:
/usr/lib/gcc/x86_64-redhat-
linux/4.8.2/../../../../include/c++/4.8.2/tr2/type_traits:90:45: error: '_Tp'
does not refer to a value
      typedef __reflection_typelist<__bases(_Tp)...>            type;
                                            ^
/usr/lib/gcc/x86_64-redhat-
linux/4.8.2/../../../../include/c++/4.8.2/tr2/type_traits:87:21: note: declared
here
  template<typename _Tp>
                    ^
/usr/lib/gcc/x86_64-redhat-
linux/4.8.2/../../../../include/c++/4.8.2/tr2/type_traits:97:52: error: '_Tp'
does not refer to a value
      typedef __reflection_typelist<__direct_bases(_Tp)...>     type;
                                                   ^
/usr/lib/gcc/x86_64-redhat-
linux/4.8.2/../../../../include/c++/4.8.2/tr2/type_traits:94:21: note: declared
here
  template<typename _Tp>
                    ^
2 errors generated.

As you can see, Clang does not support __bases and __direct_bases intrinsics.

Alexey Frolov
=============
Software Engineer
Intel Compiler Team
Intel
Quuxplusone commented 8 years ago

I'm considering using __direct_bases in libstdc++'s so it would not only be used in an obscure, non-standard extension. Would implementing that intrinsic be a problem for Clang?

If necessary I could check clang and use an inferior solution instead of __direct_bases, but I'd prefer not to do that extra work.