Home > Net >  How to check in c noexcept(T T), where T is template
How to check in c noexcept(T T), where T is template

Time:01-27

How to c check in noexcept that the template parameter T defined through template will throw or not throw an exception during the operation . In fact, you need to check the addition T T for throwing a possible exception. I wrote the following code: noexcept(T T), but, unfortunately, such code does not compile.

CodePudding user response:

T T is not a valid expression. T is a type, and types do not have operators. What you want are objects of type T and to add them together to see if that expression is noexcept or not. You can do that like

noexcept(std::declval<T>()   std::declval<T>())

CodePudding user response:

If you're using C 20, you can write a concept to check this:

template<class T>
concept noexcept_addable = requires(T a)
{
    requires noexcept(a   a);
};

Note that it's requires noexcept(a a);, not just noexcept(a a);. The latter would just check that noexcept(a a); is valid to compile, whereas the former actually requires that it evaluates to true.

You can see a demo of this concept here.

  •  Tags:  
  • Related