[all-commits] [llvm/llvm-project] 2b4cad: [clang] Enable the special enable_if_t diagnostics...

Quuxplusone via All-commits all-commits at lists.llvm.org
Sat Sep 11 11:45:53 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 2b4cad5e471c60edae528979fa5f3edde844ac34
      https://github.com/llvm/llvm-project/commit/2b4cad5e471c60edae528979fa5f3edde844ac34
  Author: Arthur O'Dwyer <arthur.j.odwyer at gmail.com>
  Date:   2021-09-11 (Sat, 11 Sep 2021)

  Changed paths:
    M clang/lib/Sema/SemaTemplate.cpp
    A clang/test/SemaTemplate/diagnose-enable-if-t.cpp

  Log Message:
  -----------
  [clang] Enable the special enable_if_t diagnostics for libc++'s __enable_if_t as well.

This comes from lengthy discussion between Quuxplusone and ldionne over on D108216.
Right now, libc++ uses a "SCARY metaprogramming" version of _EnableIf that bypasses
all of Clang's clever diagnostic stuff and thus produces bad diagnostics. My recent
benchmarks ( https://quuxplusone.github.io/blog/2021/09/04/enable-if-benchmark/ )
have determined that the SCARYness is not buying us any speedup; therefore we are
happy to drop it and go back to using the standard std::enable_if for all our
SFINAE needs. However, we don't want to type out typename std::enable_if<X>::type
all over the library; we want to use an alias template. And we can't use
std::enable_if_t because we need a solution that works in C++11, and we do not
provide std::enable_if_t in C++11.

Therefore, D109435 switches us from SCARY `_EnableIf` to a normal `__enable_if_t`
(at least in C++11 mode, and possibly everywhere for consistency).
Simultaneously, this Clang patch enables the good diagnostics for `__enable_if_t`.
We don't need to enable good diagnostics for `_EnableIf` because the name
`_EnableIf` has only ever been used for the SCARY version where the good diagnostics
don't trigger anyway.

(Btw, this existing code is all sorts of broken, theoretically speaking.
I filed https://bugs.llvm.org/show_bug.cgi?id=51696 about it last week.
So if someone wants to use this PR as an excuse to go down the rabbit hole
and fix it for real, that would be cool too.)

Differential Revision: https://reviews.llvm.org/D109411




More information about the All-commits mailing list