1// bindgen-flags: --enable-cxx-namespaces -- -std=c++11 2 3// `Wrapper::sentry` and `sentry` should be emitted as `Wrapper_sentry` and 4// `sentry` respectively, but instead `Wrapper::sentry` is named just `sentry` 5// which leads to compilation errors. 6// 7// Note: if there is no namespace, then we don't run into problems. Similarly, 8// making the `Wrapper::sentry` definition inline in `Wrapper`, rather than 9// declared inline with an out of line definition, makes the problem go away as 10// well. 11 12namespace whatever { 13 template <typename, typename> 14 class Wrapper { 15 // Declaration of Wrapper::sentry 16 class sentry; 17 }; 18 19 // Definition of Wrapper::sentry 20 template <typename f, typename h> 21 class Wrapper<f, h>::sentry { 22 int i_am_wrapper_sentry; 23 }; 24 25 class sentry { 26 bool i_am_plain_sentry; 27 }; 28 29 // Ok, that was the original bug report. While we're here, let's just try 30 // lots of different things that could go wrong and make sure we handle them 31 // right. 32 33 class NotTemplateWrapper { 34 class sentry; 35 }; 36 37 class NotTemplateWrapper::sentry { 38 char i_am_not_template_wrapper_sentry; 39 }; 40 41 class InlineNotTemplateWrapper { 42 class sentry { 43 bool i_am_inline_not_template_wrapper_sentry; 44 }; 45 }; 46 47 template <typename, typename> 48 class InlineTemplateWrapper { 49 class sentry { 50 int i_am_inline_template_wrapper_sentry; 51 }; 52 }; 53 54 class OuterDoubleWrapper { 55 class InnerDoubleWrapper { 56 class sentry; 57 }; 58 }; 59 60 class OuterDoubleWrapper::InnerDoubleWrapper::sentry { 61 int i_am_double_wrapper_sentry; 62 }; 63 64 class OuterDoubleInlineWrapper { 65 class InnerDoubleInlineWrapper { 66 class sentry { 67 int i_am_double_wrapper_inline_sentry; 68 }; 69 }; 70 }; 71} 72 73template <typename, typename> 74class OutsideNamespaceWrapper { 75 class sentry; 76}; 77 78template <typename f, typename h> 79class OutsideNamespaceWrapper<f, h>::sentry { 80 int i_am_outside_namespace_wrapper_sentry; 81}; 82 83class sentry { 84 int i_am_outside_namespace_sentry; 85}; 86