File: mutating_visitor.cpp

package info (click to toggle)
mapbox-variant 1.2.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,648 kB
  • sloc: cpp: 31,068; ansic: 959; python: 424; makefile: 145; objc: 59; sh: 36
file content (36 lines) | stat: -rw-r--r-- 681 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

#include "catch.hpp"

#include <mapbox/variant.hpp>
#include <mapbox/variant_io.hpp>

#include <string>

template <typename T>
struct mutating_visitor
{
    mutating_visitor(T& val)
        : val_(val) {}

    void operator()(T& val) const
    {
        val = val_;
    }

    template <typename T1>
    void operator()(T1&) const
    {
    } // no-op

    T& val_;
};

TEST_CASE("variant visitation", "[visitor][unary visitor]")
{
    mapbox::util::variant<int, double, std::string> var(123);
    REQUIRE(var.get<int>() == 123);
    int val = 456;
    const mutating_visitor<int> visitor(val);
    mapbox::util::apply_visitor(visitor, var);
    REQUIRE(var.get<int>() == 456);
}