[Bug c++/86355] New: Internal compiler error with pack expansion and fold expression
pdimov at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Jun 29 00:04:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86355
Bug ID: 86355
Summary: Internal compiler error with pack expansion and fold
expression
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: pdimov at gmail dot com
Target Milestone: ---
The following code
```
#include <type_traits>
template<bool B> using mp_bool = std::integral_constant<bool, B>;
using mp_true = mp_bool<true>;
template<class... T> using mp_all = mp_bool<(static_cast<bool>(T::value) &&
...)>;
template<class V, class... T> using check2 = mp_all<std::is_same<V, void>,
mp_all<std::is_copy_constructible<T>...,
mp_all<std::is_copy_assignable<T>...>>>;
static_assert( std::is_same<check2<void, int, float>, mp_true>::value );
```
with g++ 7.3 (and 8.1) yields
```
testbed2017.cpp: In substitution of 'template<class V, class ... T> using
check2
= mp_all<std::is_same<V, void>, std::integral_constant<bool,
(static_cast<bool>(T::value) && ...)> > [with V = void; T = {int, float}]':
testbed2017.cpp:10:52: required from here
testbed2017.cpp:8:156: internal compiler error: Segmentation fault
template<class V, class... T> using check2 = mp_all<std::is_same<V, void>,
mp_all<std::is_copy_constructible<T>...,
mp_all<std::is_copy_assignable<T>...>>>;
^
```
clang++ accepts it.
More information about the Gcc-bugs
mailing list