auto_any_cast.hpp 593 Bytes
Newer Older
Paul's avatar
Paul committed
1
2
#ifndef MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP
#define MIGRAPH_GUARD_RTGLIB_AUTO_ANY_CAST_HPP
3
#include <migraph/config.hpp>
Paul's avatar
Paul committed
4

5
namespace migraph { inline namespace MIGRAPH_INLINE_NS {
Paul's avatar
Paul committed
6
7
8

namespace detail {

Paul's avatar
Paul committed
9
10
11
12
template <class U>
void any_cast()
{
}
Paul's avatar
Paul committed
13

Paul's avatar
Paul committed
14
template <class T>
Paul's avatar
Paul committed
15
16
17
18
19
20
21
22
23
24
struct auto_any_caster
{
    T& x;

    template <class U>
    operator U&()
    {
        return any_cast<U>(x);
    }

Paul's avatar
Paul committed
25
    operator T&() { return x; }
Paul's avatar
Paul committed
26
27
};

Paul's avatar
Paul committed
28
} // namespace detail
Paul's avatar
Paul committed
29

Paul's avatar
Paul committed
30
template <class T>
Paul's avatar
Paul committed
31
32
33
34
35
detail::auto_any_caster<T> auto_any_cast(T& x)
{
    return {x};
}

36
} // namespace MIGRAPH_INLINE_NS
Paul's avatar
Paul committed
37
38
39
} // namespace migraph

#endif