Demonstration of how one C++20 Concept can depend on another C++20 Concept
C++20 Concepts provide a way to define constraints on template parameters, enabling better compile-time checking and more readable error messages.
This project briefly demonstrates how one Concept (DataProcessorConcept) can depend on another. The following classes, Concepts and templates are used:
- Concrete data container type that other classes retrieve and operate on.
- Concept requiring a
GetData()method that returns aSimpleDataobject.
- Concept requiring a
ProcessData(std::shared_ptr<DataRetrieverConcept>)method that returns aSimpleDataobject.
TwoRetrieverFourRetriever
MultiplyByTwoProcessorDivideByTwoProcessor
- Compile-time
static_assertrequiresPto comply withDataProcessorConcept
git clone https://gist.github.com/8239a11398d5ec356730a192516d785f.git concepts-example
cd concepts-example
mkdir build
cmake -B build
cmake --build build
Note
To enable verbose Concepts-related compiler error messages, replace:
cmake -B build
with:
cmake -B build -DENABLE_CONCEPT_ERROR_DETAIL=ON.
./build/bin/concept_using_concept
demonstrate<MultiplyByTwoProcessor<TwoRetriever>>() → 2 x 2 = 4
demonstrate<DivideByTwoProcessor<TwoRetriever>>() → 2 / 2 = 1
demonstrate<MultiplyByTwoProcessor<FourRetriever>>() → 4 x 2 = 8
demonstrate<DivideByTwoProcessor<FourRetriever>>() → 4 / 2 = 2