| //===----------------------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // REQUIRES: std-at-least-c++26 | |
| // constant_wrapper | |
| // The class template constant_wrapper aids in metaprogramming by ensuring that the | |
| // evaluation of expressions comprised entirely of constant_wrapper are core constant | |
| // expressions ([expr.const]), regardless of the context in which they appear. In particular, | |
| // this enables use of constant_wrapper values that are passed as arguments to constexpr | |
| // functions to be used in constant expressions. | |
| #include <utility> | |
| constexpr auto initial_phase(auto quantity_1, auto quantity_2) { return quantity_1 + quantity_2; } | |
| constexpr auto middle_phase(auto tbd) { return tbd; } | |
| constexpr void profit() {} | |
| void final_phase(auto gathered, auto available) { | |
| if constexpr (gathered == available) | |
| profit(); | |
| } | |
| void impeccable_underground_planning() { | |
| auto gathered_quantity = middle_phase(initial_phase(std::cw<42>, std::cw<13>)); | |
| static_assert(gathered_quantity == 55); | |
| auto all_available = std::cw<55>; | |
| final_phase(gathered_quantity, all_available); | |
| } | |
| int main(int, char**) { | |
| impeccable_underground_planning(); | |
| return 0; | |
| } |