Skip to content

Instantly share code, notes, and snippets.

@xaxxon
Created October 31, 2017 22:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xaxxon/d6df25e2c88cb19d2d490377bfa44dc7 to your computer and use it in GitHub Desktop.
Save xaxxon/d6df25e2c88cb19d2d490377bfa44dc7 to your computer and use it in GitHub Desktop.
// this should never be able to be instantiated
template<typename T>
struct _remove_reference_wrapper;
template<typename T>
struct _remove_reference_wrapper<std::reference_wrapper<T>> {
using type = T;
};
template<typename T, typename = void>
struct remove_reference_wrapper {
using type = T;
};
template<typename T>
struct remove_reference_wrapper<T, std::enable_if_t<is_template_for_v<std::reference_wrapper, T>>> :
public _remove_reference_wrapper<std::decay_t<T>>
{};
template<typename T>
using remove_reference_wrapper_t = typename remove_reference_wrapper<T>::type;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment