https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95807
Bug ID: 95807 Summary: GCC accepts "void value not ignored as it ought to be" in function template Product: gcc Version: 11.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: haoxintu at gmail dot com Target Milestone: --- GCC accepts "void value not ignored as it ought to be" in a function template but rejects it in a normal function definition. $cat bug.cc void foo1() {int var = throw;}; template <class> void foo2() {int var = throw;}; $g++ -c bug.cc bug.cc: In function ‘void foo()’: bug.cc:1:23: error: void value not ignored as it ought to be 1 | void foo1() {int var = throw;}; | ^~~~~ Noted that GCC only rejects line 1 but accepts line 3. In clang $clang++ -c bug.cc bug.cc:1:18: error: cannot initialize a variable of type 'int' with an rvalue of type 'void' void foo1() {int var = throw;}; ^ ~~~~~ bug.cc:3:18: error: cannot initialize a variable of type 'int' with an rvalue of type 'void' void foo2(){ int var = throw;}; ^ ~~~~~ 2 errors generated. My GCC version is $g++ --version g++ (GCC) 11.0.0 20200605 (experimental) Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.