online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
#include <cstddef> #include <iostream> #include <memory> #include <stdexcept> #include <string> #include <tuple> #include <type_traits> #include <utility> #include <variant> // created with ChatGPT namespace detail { template <class Tuple, std::size_t... Is> using tuple_ptr_variant_t = std::variant<std::add_pointer_t<std::tuple_element_t<Is, std::remove_reference_t<Tuple>>>...>; template <class Tuple, std::size_t... Is> constexpr auto get_index_impl(Tuple& tup, std::size_t index, std::index_sequence<Is...>) -> tuple_ptr_variant_t<Tuple, Is...> { using result_t = tuple_ptr_variant_t<Tuple, Is...>; if (index >= sizeof...(Is)) throw std::out_of_range("get_index: index out of range"); result_t result{}; ((index == Is ? (static_cast<void>(result.template emplace<Is>(std::addressof(std::get<Is>(tup)))), true) : false) || ...); return result; } } template <class Tuple> constexpr auto get_index(Tuple& tup, std::size_t index) { using tuple_t = std::remove_reference_t<Tuple>; return detail::get_index_impl(tup, index, std::make_index_sequence<std::tuple_size_v<tuple_t>>{}); } template <class Tuple> constexpr auto get_index(Tuple&&, std::size_t) = delete; void process(std::variant<int*, double*, std::string*> v) { if (std::holds_alternative<double*>(v)) *std::get<double*>(v) += 10.; std::visit([](auto* elem) { std::cout << "print any: " << *elem << '\n'; }, v); } int main() { std::tuple<int, double, std::string> t{100, 9.81, "abc"}; std::size_t idx = 1; process(get_index(t, idx)); process(get_index(t, 2)); }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue