// PR c++/51141 // { dg-do compile } // { dg-options "-fpermissive -w -Werror" } typedef int size_t; template < size_t, size_t > struct AlignedBuffer {}; template < typename > class VectorBufferBase { public: allocateBuffer (size_t) { } buffer () { } *m_buffer; size_t m_capacity; }; template < typename T, size_t > class VectorBuffer:VectorBufferBase < T > { typedef VectorBufferBase < T > Base; public: VectorBuffer () { } allocateBuffer (size_t) { m_capacity = 0; } Base::buffer; Base::m_buffer; Base::m_capacity; size_t m_inlineBufferSize; AlignedBuffer < 0, __alignof__ (T) > m_inlineBuffer; }; template < typename T, size_t > class Vector { typedef VectorBuffer < T, 0 > Buffer; public: void shrinkCapacity (size_t); clear () { shrinkCapacity (0); } Buffer m_buffer; }; template < typename T, size_t inlineCapacity > void Vector < T, inlineCapacity >::shrinkCapacity (size_t) { m_buffer.allocateBuffer (0); } struct PatternDisjunction; struct YarrPattern { reset () { m_disjunctions.clear (); } Vector < PatternDisjunction *, 0 > m_disjunctions; };