C++ Logo

std-proposals

Advanced search

Re: constexpr ternary operator

From: Nikolay Mihaylov <nmmm_at_[hidden]>
Date: Thu, 21 Oct 2021 16:06:01 +0300
what about restructuring like this:

template<typename T>
void more_code(T a);

template <typename T>
void f(T const& t){
           if constexpr (pred<T>){
                return more_code(makeFoo());
           } else {
                return more_code(makeBar());
           }
}


On Thu, Oct 21, 2021 at 3:49 PM Hui Xie via Std-Proposals <
std-proposals_at_[hidden]> wrote:

> Hi,
>
> Sometimes I have this situation
>
> template <typename T>
> void f(T const& t){
> const auto obj = []{
> if constexpr (pred<T>){
> return makeFoo();
> } else {
> return makeBar();
> }
> }();
>
> const auto x = g(obj); // different overload g for Foo and Bar
> // more code
> }
>
>
> What I really want to write is a ternary operator
> const auto obj = pred<T> ? makeFoo() : makeBar();
>
> But Foo and Bar are different types, so it won't work.
>
> What about allowing us to write
> const auto obj = pred<T> constexpr? makeFoo() : makeBar();
>
> Any ideas?
>
> Thanks
> Hui
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>

Received on 2021-10-21 08:06:40