https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118488
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=118530 --- Comment #4 from Jason Merrill <jason at gcc dot gnu.org> --- Given that clang allows expl1 as written but does not allow the version in PR118530 that returns void rather than the template parameter, it seems that the deduction they are doing to produce the variant considers the return type, i.e. [temp.deduct.funcaddr] rather than [temp.deduct.call]. That is, given an overload set, find a result with a type that matches the one you have for the base function. Since OpenMP requires the types to match, there is some appeal to this model compared to the function call model, but the spec "The function variant is determined by base language standard name lookup rules ([basic.lookup]) of variant-name using the argument types at the call site..." seems to specify the function call model. Rejecting expl2 is just a bug.