.. _program_listing_file_dx2_beam_ops.cxx: Program Listing for File beam_ops.cxx ===================================== |exhale_lsh| :ref:`Return to documentation for file ` (``dx2/beam_ops.cxx``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include #include #include #include namespace beam_ops { MonochromaticBeam &require_monochromatic(Beam &beam) { if (auto *b = std::get_if(&beam)) { return *b; } throw std::invalid_argument("Beam must be monochromatic"); } const MonochromaticBeam &require_monochromatic(const Beam &beam) { if (auto *b = std::get_if(&beam)) { return *b; } throw std::invalid_argument("Beam must be monochromatic"); } PolychromaticBeam &require_polychromatic(Beam &beam) { if (auto *b = std::get_if(&beam)) { return *b; } throw std::invalid_argument("Beam must be polychromatic"); } const PolychromaticBeam &require_polychromatic(const Beam &beam) { if (auto *b = std::get_if(&beam)) { return *b; } throw std::invalid_argument("Beam must be polychromatic"); } } // namespace beam_ops