; RUN: llvm-undname < %s | FileCheck %s ; CHECK-NOT: Invalid mangled name ??$?BH@TemplateOps@@QAEHXZ ; CHECK: int __thiscall TemplateOps::operator int(void) ??BOps@@QAEHXZ ; CHECK: int __thiscall Ops::operator int(void) ??BConstOps@@QAE?BHXZ ; CHECK: int const __thiscall ConstOps::operator int const(void) ??BVolatileOps@@QAE?CHXZ ; CHECK: int volatile __thiscall VolatileOps::operator int volatile(void) ??BConstVolatileOps@@QAE?DHXZ ; CHECK: int const volatile __thiscall ConstVolatileOps::operator int const volatile(void) ??$?BN@TemplateOps@@QAENXZ ; CHECK: double __thiscall TemplateOps::operator double(void) ??BOps@@QAENXZ ; CHECK: double __thiscall Ops::operator double(void) ??BConstOps@@QAE?BNXZ ; CHECK: double const __thiscall ConstOps::operator double const(void) ??BVolatileOps@@QAE?CNXZ ; CHECK: double volatile __thiscall VolatileOps::operator double volatile(void) ??BConstVolatileOps@@QAE?DNXZ ; CHECK: double const volatile __thiscall ConstVolatileOps::operator double const volatile(void) ??BCompoundTypeOps@@QAEPAHXZ ; CHECK: nt * __thiscall CompoundTypeOps::operator int *(void) ??BCompoundTypeOps@@QAEPBHXZ ; CHECK: int const * __thiscall CompoundTypeOps::operator int const *(void) ??BCompoundTypeOps@@QAE$$QAHXZ ; CHECK: int && __thiscall CompoundTypeOps::operator int &&(void) ??BCompoundTypeOps@@QAE?AU?$Foo@H@@XZ ; CHECK: struct Foo __thiscall CompoundTypeOps::operator struct Foo(void) ??$?BH@CompoundTypeOps@@QAE?AU?$Bar@U?$Foo@H@@@@XZ ; CHECK: struct Bar> __thiscall CompoundTypeOps::operator struct Bar>(void) ??$?BPAH@TemplateOps@@QAEPAHXZ ; CHECK: int * __thiscall TemplateOps::operator int *(void)