C++ Logo

std-proposals

Advanced search

Re: Static Failure - Custom Compile-Time Errors

From: Henry Miller <hank_at_[hidden]>
Date: Fri, 18 Jun 2021 06:22:58 -0500
If your purpose is to prevent only one or two types, I believe the current static assert works just fine as you can list the not allowed ones. I think you should change your example message to not say int_32 is not allowed to something more generic
-- 
  Henry Miller
  hank_at_[hidden] <mailto:hank%40millerfarm.com>
On Fri, Jun 18, 2021, at 02:26, David Braun via Std-Proposals wrote:
> 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] <mailto:Std-Proposals%40lists.isocpp.org>
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
> 

Received on 2021-06-18 06:23:24