aaron.ballman added a comment.

In https://reviews.llvm.org/D20693#639030, @hintonda wrote:

> Matthias, I think you make a good point.  While noexcept(expr) is valuable, 
> noexcept(false) adds no value.  Therefore, I think we should do as you 
> suggest, i.e.:
>
>   s/throw()/noexcept/
>   s/throw(something)//
>   
>
> Aaron, does this work for you?


I think it makes a reasonable option, but I think it should be off by default. 
Again, I think that's hostile towards users to remove an explicit exception 
specification entirely when there was an explicit dynamic exception 
specification written on the function signature. `noexcept(false)` is a 
stronger signal to anyone reading the signature than no exception specification 
whatsoever.

Be careful, though, not to break code by removing the exception specification. 
These two are *not* equivalent, for instance:

  struct S {
    ~S() noexcept(false);
    void operator delete(void *ptr) noexcept(false); 
  };
  
  struct T {
    ~T(); // Is actually noexcept(true) by default!
    void operator delete(void *ptr); // Is actually noexcept(true) by default!
  };


https://reviews.llvm.org/D20693



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to