@@ -4980,40 +4980,58 @@ class TestSymbolDatabase : public TestFixture {
49804980 }
49814981
49824982 void symboldatabase75 () {
4983- GET_SYMBOL_DB (" template <typename T>\n "
4984- " class optional {\n "
4985- " auto value() & -> T &;\n "
4986- " auto value() && -> T &&;\n "
4987- " auto value() const& -> T const &;\n "
4988- " };\n "
4989- " template <typename T>\n "
4990- " auto optional<T>::value() & -> T & {}\n "
4991- " template <typename T>\n "
4992- " auto optional<T>::value() && -> T && {}\n "
4993- " template <typename T>\n "
4994- " auto optional<T>::value() const & -> T const & {}\n "
4995- " optional<int> i;" );
4983+ {
4984+ GET_SYMBOL_DB (" template <typename T>\n "
4985+ " class optional {\n "
4986+ " auto value() & -> T &;\n "
4987+ " auto value() && -> T &&;\n "
4988+ " auto value() const& -> T const &;\n "
4989+ " };\n "
4990+ " template <typename T>\n "
4991+ " auto optional<T>::value() & -> T & {}\n "
4992+ " template <typename T>\n "
4993+ " auto optional<T>::value() && -> T && {}\n "
4994+ " template <typename T>\n "
4995+ " auto optional<T>::value() const & -> T const & {}\n "
4996+ " optional<int> i;" );
49964997
4997- ASSERT_EQUALS (5 , db->scopeList .size ());
4998- ASSERT_EQUALS (3 , db->functionScopes .size ());
4999-
5000- const Scope *f = db->functionScopes [0 ];
5001- ASSERT (f->function ->hasBody ());
5002- ASSERT (!f->function ->isConst ());
5003- ASSERT (f->function ->hasTrailingReturnType ());
5004- ASSERT (f->function ->hasLvalRefQualifier ());
5005-
5006- f = db->functionScopes [1 ];
5007- ASSERT (f->function ->hasBody ());
5008- ASSERT (!f->function ->isConst ());
5009- ASSERT (f->function ->hasTrailingReturnType ());
5010- ASSERT (f->function ->hasRvalRefQualifier ());
5011-
5012- f = db->functionScopes [2 ];
5013- ASSERT (f->function ->hasBody ());
5014- ASSERT (f->function ->isConst ());
5015- ASSERT (f->function ->hasTrailingReturnType ());
5016- ASSERT (f->function ->hasLvalRefQualifier ());
4998+ ASSERT_EQUALS (5 , db->scopeList .size ());
4999+ ASSERT_EQUALS (3 , db->functionScopes .size ());
5000+
5001+ const Scope *f = db->functionScopes [0 ];
5002+ ASSERT (f->function ->hasBody ());
5003+ ASSERT (!f->function ->isConst ());
5004+ ASSERT (f->function ->hasTrailingReturnType ());
5005+ ASSERT (f->function ->hasLvalRefQualifier ());
5006+
5007+ f = db->functionScopes [1 ];
5008+ ASSERT (f->function ->hasBody ());
5009+ ASSERT (!f->function ->isConst ());
5010+ ASSERT (f->function ->hasTrailingReturnType ());
5011+ ASSERT (f->function ->hasRvalRefQualifier ());
5012+
5013+ f = db->functionScopes [2 ];
5014+ ASSERT (f->function ->hasBody ());
5015+ ASSERT (f->function ->isConst ());
5016+ ASSERT (f->function ->hasTrailingReturnType ());
5017+ ASSERT (f->function ->hasLvalRefQualifier ());
5018+ }
5019+ {
5020+ GET_SYMBOL_DB (" struct S {\n " // #12962
5021+ " auto bar() const noexcept -> std::string const& { return m; }\n "
5022+ " std::string m;\n "
5023+ " };\n " );
5024+
5025+ ASSERT_EQUALS (3 , db->scopeList .size ());
5026+ ASSERT_EQUALS (1 , db->functionScopes .size ());
5027+
5028+ const Scope* f = db->functionScopes [0 ];
5029+ ASSERT (f->function ->hasBody ());
5030+ ASSERT (f->function ->isConst ());
5031+ ASSERT (f->function ->hasTrailingReturnType ());
5032+ ASSERT (f->function ->isNoExcept ());
5033+ ASSERT (Function::returnsReference (f->function ));
5034+ }
50175035 }
50185036
50195037 void symboldatabase76 () { // #9056
0 commit comments