C++C++11C++14C++17C++20Learn C++Syntax

What Is The disjunction (std::disjunction) Metafunction In C++?

What Is The disjunction stddisjunction Metafunction In C++

Metaprogramming is another great feature of modern C++ that allows programs to redesign themselves during compilation or run time. In C++17, another new feature of metaprogramming is introduced, logical operation metafunctions. These are variadic metafunctions that are conjunction, disjunction, and negation which can be used for metaprogramming features of applications. In this post, we explain what the disjunction (std::disjunction) metafunction is.

What are the logical operation metafunctions in C++?

Modern C++ has metaprogramming abilities which is a programming technique that a program can be compiled to read, create, analyze, or transfer other program codes or it can compile itself, it can change the way of running codes while running.

In C++17, new variadic metafunctions are released for metaprogramming, these are conjunction, conjunction_v, disjunction, disjunction_v, and negation, negation_v. These traits short-circuit in the metaprogramming sense: template specializations that are not required to determine the result are not instantiated.

What is the disjunction (disjunction) metafunction in C++ ?

In C++, disjunction (std::disjunction) or disjunction_v (std::disjunction_v) is a type trait that is defined in the <type_traits> header that is used to design the logical disjunction between classes (data types, structs, classes). It is a kind of logical template of OR on a variadic p

Here is the simple definition of std::disjunction:

Here is the simple definition of std::disjunction_v which is a template of disjunction<...>::value,

Is there a simple example of how to use disjunction in C++?

Here is a simple example how you can use disjunction in C++.

Here above, std::conjunction<Int2, Int4>::value evaluates to true, which corresponds to the logical AND of Int2::value (2) and Int4::value (4) . The short-circuit behavior of std::conjunction ensures that it stops evaluating as soon as it encounters a false value, similar to how logical AND works.

We can use it to check class relations logically as shown below.

Here, above std::is_base_of<BaseA, DerivedA> and std::is_base_of<baseB, derivedB> both evaluate to true.

Is there a full example about disjunction in C++?

Here is a full example about the std::disjunction metafunction in C++.

For more new details about std::set, you can check this paper P0013R1

What Is The disjunction stddisjunction Metafunction In C++ C++ logo

C++ Builder is the easiest and fastest C and C++ compiler and IDE for building simple or professional applications on the Windows operating system. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for UIs.

There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise versions of C++ Builder and there is a trial version you can download from here.

Oh hi there 👋
It’s nice to meet you.

Sign up to receive awesome C++ content in your inbox, every day.

We don’t spam! Read our privacy policy for more info.


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial

Free C++Builder Community Edition

About author

Dr. Yilmaz Yoru has 35+ years of coding with more than 30+ programming languages, mostly C++ on Windows, Android, Mac-OS, iOS, Linux, and some other operating systems. He graduated and received his MSc and PhD degrees from the Department of Mechanical Engineering of Eskisehir Osmangazi University. He is the founder and CEO of ESENJA LLC Company. His interests are Programming, Thermodynamics, Fluid Mechanics, Artificial Intelligence, 2D & 3D Designs, and high-end innovations.
Related posts
C++C++11C++14C++17C++20Introduction to C++Learn C++

Learn Copy Constructors in C++ Classes

C++C++11C++14C++17Introduction to C++Learn C++Syntax

Learn How To Use Types Of Destructors In C++?

C++C++11C++14Learn C++Syntax

How To Convert u32string To A wstring In C++

C++C++11C++14C++17C++20Introduction to C++Learn C++

How To Learn The Move Constructors In Modern C++?