https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71568
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-02-23
CC| |jason at gcc dot gnu.org,
| |trippels at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #2 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
markus@x4 /tmp % cat tupl.ii
struct A {
static constexpr int value = 0;
};
template <int> struct B { typedef int type; };
template <unsigned long, typename...> struct C;
template <unsigned long _Idx, typename _Head> struct C<_Idx, _Head> : _Head {};
template <typename... _Elements> class F : C<0, _Elements...> {};
template <typename> using void_t = void;
template <class, class = void> struct G : A {};
template <typename T> struct G<T, void_t<decltype(&T::nlog_custom)>> {};
template <typename Head> typename B<G<Head>::value>::type write(Head);
struct D {
void nlog_custom();
};
void test() {
F<D> __trans_tmp_2;
write(__trans_tmp_2);
}
markus@x4 /tmp % clang++ -c tupl.ii
markus@x4 /tmp % icpc -c tupl.ii
markus@x4 /tmp % g++ -c tupl.ii
tupl.ii: In instantiation of ‘struct G<F<D>, void>’:
tupl.ii:11:59: required by substitution of ‘template<class Head> typename
B<G<Head>::value>::type write(Head) [with Head = F<D>]’
tupl.ii:17:22: required from here
tupl.ii:10:51: error: ‘void D::nlog_custom()’ is inaccessible within this
context
template <typename T> struct G<T, void_t<decltype(&T::nlog_custom)>> {};
^~
tupl.ii:13:8: note: declared here
void nlog_custom();
^~~~~~~~~~~
tupl.ii:10:51: error: ‘void D::nlog_custom()’ is inaccessible within this
context
template <typename T> struct G<T, void_t<decltype(&T::nlog_custom)>> {};
^~
tupl.ii:13:8: note: declared here
void nlog_custom();
^~~~~~~~~~~
tupl.ii: In function ‘void test()’:
tupl.ii:17:22: error: no matching function for call to ‘write(F<D>&)’
write(__trans_tmp_2);
^
tupl.ii:11:59: note: candidate: template<class Head> typename
B<G<Head>::value>::type write(Head)
template <typename Head> typename B<G<Head>::value>::type write(Head);
^~~~~
tupl.ii:11:59: note: substitution of deduced template arguments resulted in
errors seen above