// bindgen-flags: --enable-cxx-namespaces -- -std=c++11 // `Wrapper::sentry` and `sentry` should be emitted as `Wrapper_sentry` and // `sentry` respectively, but instead `Wrapper::sentry` is named just `sentry` // which leads to compilation errors. // // Note: if there is no namespace, then we don't run into problems. Similarly, // making the `Wrapper::sentry` definition inline in `Wrapper`, rather than // declared inline with an out of line definition, makes the problem go away as // well. namespace whatever { template class Wrapper { // Declaration of Wrapper::sentry class sentry; }; // Definition of Wrapper::sentry template class Wrapper::sentry { int i_am_wrapper_sentry; }; class sentry { bool i_am_plain_sentry; }; // Ok, that was the original bug report. While we're here, let's just try // lots of different things that could go wrong and make sure we handle them // right. class NotTemplateWrapper { class sentry; }; class NotTemplateWrapper::sentry { char i_am_not_template_wrapper_sentry; }; class InlineNotTemplateWrapper { class sentry { bool i_am_inline_not_template_wrapper_sentry; }; }; template class InlineTemplateWrapper { class sentry { int i_am_inline_template_wrapper_sentry; }; }; class OuterDoubleWrapper { class InnerDoubleWrapper { class sentry; }; }; class OuterDoubleWrapper::InnerDoubleWrapper::sentry { int i_am_double_wrapper_sentry; }; class OuterDoubleInlineWrapper { class InnerDoubleInlineWrapper { class sentry { int i_am_double_wrapper_inline_sentry; }; }; }; } template class OutsideNamespaceWrapper { class sentry; }; template class OutsideNamespaceWrapper::sentry { int i_am_outside_namespace_wrapper_sentry; }; class sentry { int i_am_outside_namespace_sentry; };