Skip to content

Instantly share code, notes, and snippets.

@Cleroth
Created March 12, 2019 09:57
Show Gist options
  • Save Cleroth/246fa485ea1db6a930a72487fdec8609 to your computer and use it in GitHub Desktop.
Save Cleroth/246fa485ea1db6a930a72487fdec8609 to your computer and use it in GitHub Desktop.
template <typename T>
struct OutArg {
T * operator ->() const
{
return &_t;
}
T & operator*() const
{
return _t;
}
operator T&() const
{
return _t;
}
OutArg(T & t) : _t(t) {}
private:
T & _t;
OutArg(OutArg&) = delete;
};
namespace detail {
struct OutArgConstructor
{
template <typename T>
OutArg<T> & operator^(OutArg<T> & t)
{
return t;
}
template <typename T>
OutArg<T> operator^(T & t)
{
return OutArg(t);
}
};
};
#define out_ detail::OutArgConstructor{} ^
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment