https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109887
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Chuanqi Xu from comment #0) > _ZNK1n1S3getIbEENSt9enable_ifIXsrSt11is_integralIT_E5valueEN4llvm8OptionalIS4 > _EEE4typeENS6_9StringRefE > ``` > > and clang will mangle it as: > > ``` > _ZNK1n1S3getIbEENSt9enable_ifIXsr3std11is_integralIT_EE5valueEN4llvm8Optional > IS3_EEE4typeENS4_9StringRefE The difference is that GCC mangles std::is_integral as St11is_integral and Clang mangles it as 3std::is_integral. I think GCC is right. Clang uses St9enable_if for std::enable_if so I don't knwo why it doesn't use the St substitution for std::is_integral.