[Bug c++/84586] Incorrect acess checking with inheritance
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 27 12:34:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84586
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-02-27
Ever confirmed|0 |1
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Reduced and fixed to compile with clang:
namespace std {
using size_t = decltype(sizeof(0));
template<typename T> struct tuple { };
template<size_t, typename T> struct tuple_element;
template<typename T> struct tuple_element<0, tuple<T>> { using type = T; };
}
#ifdef USING_SIMPLE_BASE
#define BASE base<T>
#else
#ifdef USING_DIFFERENT_NAME
#define NAME type_
#else
#define NAME type
#endif
#define BASE tuple_element_t<0,std::tuple<base<T>>>
#endif
//Simple trait for replacement of nested name
template<std::size_t I, typename T> struct tuple_element
:private std::tuple_element<I,T>::type
{
using NAME = typename std::tuple_element<I,T>::type;
};
template<std::size_t I, typename T>
using tuple_element_t = typename tuple_element<I,T>::NAME;
template<typename> struct base { protected: using type = int; };
template<typename T> struct derived :private BASE { using typename BASE::type;
};
int main() { return derived<int>::type(0); }
More information about the Gcc-bugs
mailing list