view gcc/testsuite/g++.dg/torture/pr94216.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 2b5abeee2509
children
line wrap: on
line source

// { dg-do compile }
// { dg-additional-options "-g" }

template <int _Nm> struct A { typedef int _Type[_Nm]; };
template <int _Nm> struct B {
    typename A<_Nm>::_Type _M_elems;
    void operator[](int) { int a = *_M_elems; }
};
class C {
    struct D {
	using type = int *;
    };

public:
    using pointer = D::type;
};
class F {
public:
    using pointer = C::pointer;
    F(pointer);
};
struct G {
    int data;
};
template <int MaxDimensions> struct H {
    using dimensions_t = B<MaxDimensions>;
    dimensions_t dimensions;
    G mem;
};
template <int MaxDimensions, typename Allocator, typename DimT, typename AlignT>
H<MaxDimensions> alloc_view(int, DimT, AlignT, Allocator) {
    H<MaxDimensions> b;
    b.dimensions[0];
    return b;
}
namespace memory {
    template <typename> using DynMdView = H<6>;
}
class I {
    I();
    memory::DynMdView<void> m_view;
    F m_memory;
};
int c, d, e;
I::I() : m_view(alloc_view<6>(c, d, e, [] {})), m_memory(&m_view.mem.data) {}