EricWF added inline comments.

================
Comment at: include/experimental/coroutine:294
+
+inline _LIBCPP_ALWAYS_INLINE
+noop_coroutine_handle noop_coroutine() _NOEXCEPT {
----------------
GorNishanov wrote:
> lewissbaker wrote:
> > EricWF wrote:
> > > This should just be `_LIBCPP_INLINE_VISIBILITY`. We try not to use 
> > > `_LIBCPP_ALWAYS_INLINE` in new code.
> > Should the same change be applied to the other usages of 
> > `_LIBCPP_ALWAYS_INLINE` in this file?
> > Should some of them be marked `constexpr` to be consistent with 
> > `noop_coroutine_handle` member functions above?
> Those were added by @EricWF, so from my perspective they are immutable.
I'm not sure what I was thinking when I implemented these things with 
`_LIBCPP_ALWAYS_INLINE`.


================
Comment at: include/experimental/coroutine:288
+
+    coroutine_handle() {
+      this->__handle_ = __builtin_coro_noop();
----------------
GorNishanov wrote:
> CaseyCarter wrote:
> > CaseyCarter wrote:
> > > GorNishanov wrote:
> > > > EricWF wrote:
> > > > > Can `__builtin_coro_noop` produce a constant expression?
> > > > No. llvm generates this value, so from clang perspective, it is not a 
> > > > constant.
> > > > At llvm level it is a private per TU constant, so invocations of 
> > > > noop_coroutine() in different TUs linked into the same program will 
> > > > return you different values.
> > > If this class type is not literal - since there's no `constexpr` 
> > > constructor - applying `constexpr` to the member functions on 278-283 is 
> > > at best misleading and at worst ill-formed NDR due to 
> > > http://eel.is/c++draft/dcl.constexpr#5.
> > This constructor should be `_NOEXCEPT`, since it's invoked by 
> > `noop_coroutine` which is `_NOEXCEPT`.
> Issue for Rapperswil? These constexprs were approved by LEWG/LWG in 
> Jacksonville 2018
@CaseyCarter: I'm not sure this is true. Clang seems to be able to evaluate 
constexpr member functions of a non-literal type so long as they don't depend 
on the "argument value" of `this`. Example:

```
struct T {
  T() {}
  constexpr bool foo() const { return true; }
};
T t;
static_assert(t.foo(), "");
```


https://reviews.llvm.org/D45121



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

Reply via email to