@@ -3820,7 +3820,7 @@ class TestTokenizer : public TestFixture {
38203820
38213821 {
38223822 const char code[] = " template <typename Fn, typename... Args>\n " // #14612
3823- " void f(Fn && fn, Args&&... args) {\n "
3823+ " void f(Fn&& fn, Args&&... args) {\n "
38243824 " static_assert(std::is_invocable_v<Fn&&, Args&&...>);\n "
38253825 " }\n " ;
38263826 SimpleTokenizer tokenizer (settingsDefault, *this );
@@ -3830,6 +3830,19 @@ class TestTokenizer : public TestFixture {
38303830 ASSERT_EQUALS (true , tok1->link () == tok2);
38313831 ASSERT_EQUALS (true , tok2->link () == tok1);
38323832 }
3833+
3834+ {
3835+ const char code[] = " template <typename Fn, typename... Args>\n " // #14615
3836+ " void f(Fn&& fn, Args&&... args) {\n "
3837+ " constexpr bool b{ std::is_invocable_v<Fn&&, Args&&...> };\n "
3838+ " }\n " ;
3839+ SimpleTokenizer tokenizer (settingsDefault, *this );
3840+ ASSERT (tokenizer.tokenize (code));
3841+ const Token* tok1 = Token::findsimplematch (tokenizer.tokens (), " < Fn" );
3842+ const Token* tok2 = Token::findsimplematch (tok1, " > }" );
3843+ ASSERT_EQUALS (true , tok1->link () == tok2);
3844+ ASSERT_EQUALS (true , tok2->link () == tok1);
3845+ }
38333846 }
38343847
38353848 void simplifyString () {
0 commit comments