// { dg-do compile } // { dg-options "-fgnu-tm -O0" } namespace std { template struct char_traits; template class allocator { }; template struct less { bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; } }; template > class map { public: _Compare _M_key_compare; bool find(const _Key& __x) { return _M_key_compare(__x, __x); } }; template, typename _Alloc = allocator<_CharT> > class basic_string { public: bool compare(const basic_string& __str) const { return 0; } }; typedef basic_string string; template inline bool operator<(const basic_string<_CharT, _Traits>& __lhs, const basic_string<_CharT, _Traits>& __rhs) { return __lhs.compare(__rhs); } extern template class basic_string; } std::map units; __attribute__((transaction_callable)) void get(const std::string &name) { units.find(name); } // { dg-final { scan-assembler "_ZGTtNKSs7compareERKSs:" } }