Example #1
0
typename std::enable_if<
  std::is_same<
    void,
    decltype(std::declval<serializer&>().apply(std::declval<T&>()))
  >::value,
  serializer&
>::type
operator<<(serializer& sink, T& x) {
  sink.apply(x);
  return sink;
}
Example #2
0
typename std::enable_if<
  std::is_same<
    void,
    decltype(std::declval<serializer&>().apply(std::declval<T&>()))
  >::value,
  serializer&
>::type
operator<<(serializer& sink, const T& x) {
  // implementations are required to not change an object while serializing
  sink.apply(const_cast<T&>(x));
  return sink;
}