https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104594
Bug ID: 104594 Summary: narrowing conversion of -1 to unsigned char at compile time not detected Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: raffael at casagrande dot ch Target Milestone: --- The current gcc trunk compiles the following piece of code: ------------------------------------------------------------ template <unsigned char DIM_FROM> concept Geometry = (DIM_FROM == -1); template <class INIT> requires Geometry<INIT::n> auto GaussNewton(const INIT& init) -> void {} template<int N> struct X { static constexpr int n = N; }; int main() { GaussNewton(X<-1>{}); } -------------------------------------- I think this should NOT compile since it entails a narrowing conversion of -1 to an unsigned char type at compile time. Clang as well as MSVC fail to compile the code. (In many other cases, gcc also fails to compile if such a narrowing conversion happens at compile time.)