Date: Mon, 31 Jan 2022 11:41:24 -0500
> On Jan 30, 2022, at 7:51 AM, Jonathan O'Connor via SG7 <sg7_at_[hidden]> wrote:
>
> Fellow elevator users,
>
> Page 5:
>
> In the discussion of `^f(x)` it is not clear if `f(x)` is evaluated.
The sentence after the bullets describing what operands can be provided to the lifting operator says:
In the case where the name_or_postfix_expr is an expression, it is unevaluated but potentially constant evaluated.
> From later discussion,
> it would seem that it is evaluated if f(x) is constexpr. Presumably `^printf("hello")` is not evaluated.
>
> The final paragraph does not mention applying the lift operator to a lambda.
I’m not sure which final paragraph you’re referring to?
In C++ lambda-expressions are expressions, and a lambda-expression is a postfix-expression (via primary-expression). So, yes, you can reflect a lambda-expression.
(We don’t list every possible expansion of the grammar for purposes of conciseness.)
> Is
> that possibility missing, or is it included as a class?
I’m not sure what you mean by “is it included as a class?”. A lambda-expression is not a class, but it has class type. P1240 allows querying the type of an expression in general and so that includes lambda-expressions. So you can for example write:
typename[: type_of(^[]{}) :] x;
and that will produce a variable x of a closure type corresponding to that of the reflected lambda-expression.
>
> Page 9: final code block:
>
> There should be a comment on `^printf("Hello, ")` stating the printf function is not invoked
> before the lift operator.
>
It seems a bit redundant, but sure, I can add that. (Done in my version now.)
Daveed
>
> Regards,
> Jonathan
>
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
>
> On Saturday, January 15th, 2022 at 17:41, Daveed Vandevoorde via SG7 <sg7_at_[hidden]> wrote:
>
>> SG7 mailing list
>>
>> SG7_at_[hidden]
>>
>> https://lists.isocpp.org/mailman/listinfo.cgi/sg7
> --
> SG7 mailing list
> SG7_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/sg7
>
> Fellow elevator users,
>
> Page 5:
>
> In the discussion of `^f(x)` it is not clear if `f(x)` is evaluated.
The sentence after the bullets describing what operands can be provided to the lifting operator says:
In the case where the name_or_postfix_expr is an expression, it is unevaluated but potentially constant evaluated.
> From later discussion,
> it would seem that it is evaluated if f(x) is constexpr. Presumably `^printf("hello")` is not evaluated.
>
> The final paragraph does not mention applying the lift operator to a lambda.
I’m not sure which final paragraph you’re referring to?
In C++ lambda-expressions are expressions, and a lambda-expression is a postfix-expression (via primary-expression). So, yes, you can reflect a lambda-expression.
(We don’t list every possible expansion of the grammar for purposes of conciseness.)
> Is
> that possibility missing, or is it included as a class?
I’m not sure what you mean by “is it included as a class?”. A lambda-expression is not a class, but it has class type. P1240 allows querying the type of an expression in general and so that includes lambda-expressions. So you can for example write:
typename[: type_of(^[]{}) :] x;
and that will produce a variable x of a closure type corresponding to that of the reflected lambda-expression.
>
> Page 9: final code block:
>
> There should be a comment on `^printf("Hello, ")` stating the printf function is not invoked
> before the lift operator.
>
It seems a bit redundant, but sure, I can add that. (Done in my version now.)
Daveed
>
> Regards,
> Jonathan
>
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
>
> On Saturday, January 15th, 2022 at 17:41, Daveed Vandevoorde via SG7 <sg7_at_[hidden]> wrote:
>
>> SG7 mailing list
>>
>> SG7_at_[hidden]
>>
>> https://lists.isocpp.org/mailman/listinfo.cgi/sg7
> --
> SG7 mailing list
> SG7_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/sg7
Received on 2022-01-31 16:41:26