C++ Logo

std-proposals

Advanced search

Re: Static Failure - Custom Compile-Time Errors

From: Marcin Jaczewski <marcinjaczewski86_at_[hidden]>
Date: Fri, 18 Jun 2021 10:05:54 +0200
pt., 18 cze 2021 o 09:51 chuanqi.xcq via Std-Proposals
<std-proposals_at_[hidden]> napisał(a):
>
> Yeah, another question is that can we use 'static_assert(false, "string");' to replace the use case? I understand the current document and implementation wouldn't work.
> But I mean, what if to change the semantics for static_assert to make `static_assert(false, "")` work for the use case you mentioned? It looks not bad to me, too.
>

Whole problem here is that `static_assert` has a design goal to be
eager in evaluation of its condition. And changing this will reduce
its usefulness in that case.
Overall this proposed function could have the name
`static_assert_lazy` and will trigger only when it is
instantiationated.
As both have different behavior they should have different names.

> Thanks,
> Chuanqi
>
> ------------------------------------------------------------------
> From:David Braun via Std-Proposals <std-proposals_at_[hidden]>
> Send Time:2021年6月18日(星期五) 15:27
> To:std-proposals_at_[hidden] <std-proposals_at_[hidden]>
> Cc:David Braun <da.braun1_at_[hidden]>
> Subject:Re: [std-proposals] Static Failure - Custom Compile-Time Errors
>
> Yes, the part of my code between the two if-statements marked with /*…*/ was meant to imply that.
>
>
>
> Another use case would be if you had a function that could take an array or vector of any arithmetic type, but you needed to do something totally different for each type such as processing with AVX2 Intrinsics.
>
>
>
> However you want to prevent the user of your code from passing a specific type such as one that dose not work with AVX2 such as long double or Intel’s _Quad.
>
>
>
> Another use case is using if-constexpr to replace macros and preventing the user of your code from passing an invalid macro.
>
>
>
> Something like this:
>
>
>
> uint16_t option1 = 1;
>
> uint16_t option2 = 2;
>
>
>
> template<uint16_t opt>
>
> void myFunc()
>
> {
>
> if constexpr(opt == option1)
>
> {
>
> //Compile option 1
>
> }//End if
>
> else if(opt == option2)
>
> {
>
> //Compile option 2
>
> }//End if
>
> else
>
> {
>
> static_failure (“Compile Error! You passed an invalid macro option!”);
>
> }//End else
>
> }//End myFunc
>
>
>
> You could use static_assert for a simple example like this but imagine a function with 20 MACRO options (they exist), that would be really annoying to have to type blocks of ORs all through a single static_assert and there’d be high chances of making a mistake. I think this design would be a little nicer and cleaner.
>
>
>
> These are just a few examples. I’m sure there are other use cases. The idea is to be able to place static_failure(“”); anywhere in your code you want to trigger a compile-time error.
>
>
>
>
>
>
>
> David Aaron Braun
>
> 519-680-9822
>
> 226-236-4898
>
> da.braun1_at_[hidden]
>
>
>
> From: Std-Proposals <std-proposals-bounces_at_[hidden]> On Behalf Of chuanqi.xcq via Std-Proposals
> Sent: Thursday, June 17, 2021 10:11 PM
> To: std-proposals <std-proposals_at_[hidden]>
> Cc: chuanqi.xcq <yedeng.yd_at_[hidden]>
> Subject: Re: [std-proposals] Static Failure - Custom Compile-Time Errors
>
>
>
> Hi David,
>
>
>
> For the motivation example, it looks same for me to:
>
> ```
>
> template<typename T> requires std::is_integral<T>
>
> void my_func(T param) {
>
> static_assert(std::is_same<T, uint8_t>() || std::is_same<T,int64_t>() ,”Compile Error! You passed an
>
> int32_t into my_func !”);
>
> }
>
> ```
>
>
>
> It looks fine to me. So is the main motivation for static_failure for the situation in which the list of `if constexpr` is extrmely long?
>
>
>
> Thanks,
>
> Chuanqi
>
>
>
> ------------------------------------------------------------------
>
> From:David Braun via Std-Proposals <std-proposals_at_[hidden]>
>
> Send Time:2021年6月18日(星期五) 09:59
>
> To:std-proposals_at_[hidden] <std-proposals_at_[hidden]>
>
> Cc:David Braun <da.braun1_at_[hidden]>
>
> Subject:[std-proposals] Static Failure - Custom Compile-Time Errors
>
>
>
> From: David Braun
> Sent: Thursday, June 17, 2021 12:29 AM
> To: lwgchair_at_[hidden]
> Subject: C++ 23 Language Proposal for new type of static assertion
>
>
>
> Here is my proposal for C++ 23.
>
> Thank You!
>
>
>
> David Aaron Braun
>
> 519-680-9822
>
> 226-236-4898
>
> da.braun1_at_[hidden]
>
>
>
>
>
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals

Received on 2021-06-18 03:06:06