Issue 131136
Summary [C++][concepts] error implicit instantiation of undefined template reported from checking constraint satisfaction
Labels new issue
Assignees
Reporter thbwd
    ```
#include <string>

template <template <typename> class SB>
concept Trait = requires(SB<int> a) { a.holder0; };

template <typename T> void set_property(T);

template <template <typename> class SB, typename ST>
void set_property(SB<ST> *) requires Trait<SB>;

void initialize(std::string *name) { set_property(name); }
```

Produces the following output:

```
% /opt/homebrew/Cellar/llvm/19.1.7_1/bin/clang test.cpp -std=c++20
In file included from test.cpp:1:
/opt/homebrew/Cellar/llvm/19.1.7_1/bin/../include/c++/v1/string:820:42: error: implicit instantiation of undefined template 'std::char_traits<int>'
 820 |   static_assert(is_same<_CharT, typename traits_type::char_type>::value,
      | ^
test.cpp:4:40: note: in instantiation of template class 'std::basic_string<int>' requested here
    4 | concept Trait = requires(SB<int> a) { a.holder0; };
      | ^
test.cpp:4:39: note: in instantiation of requirement here
    4 | concept Trait = requires(SB<int> a) { a.holder0; };
      | ^~~~~~~~~
test.cpp:4:17: note: while substituting template arguments into constraint _expression_ here
    4 | concept Trait = requires(SB<int> a) { a.holder0; };
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.cpp:9:38: note: while checking the satisfaction of concept 'Trait<std::basic_string>' requested here
    9 | void set_property(SB<ST> *) requires Trait<SB>;
      | ^~~~~~~~~
test.cpp:9:38: note: while substituting template arguments into constraint _expression_ here
    9 | void set_property(SB<ST> *) requires Trait<SB>;
      | ^~~~~~~~~
test.cpp:11:38: note: while checking constraint satisfaction for template 'set_property<std::basic_string, char>' required here
   11 | void initialize(std::string *name) { set_property(name); }
      | ^~~~~~~~~~~~
test.cpp:11:38: note: in instantiation of function template specialization 'set_property<std::basic_string, char>' requested here
/opt/homebrew/Cellar/llvm/19.1.7_1/bin/../include/c++/v1/__fwd/string.h:23:29: note: template is declared here
   23 | struct _LIBCPP_TEMPLATE_VIS char_traits;
      |                             ^
1 error generated.
```

This compiles fine with 18.1.8.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to