| Index: mojo/public/cpp/bindings/lib/serialization_util.h
|
| diff --git a/mojo/public/cpp/bindings/lib/serialization_util.h b/mojo/public/cpp/bindings/lib/serialization_util.h
|
| index 9fc08b85228b1d2b40bd0c7f9a294ec4237a504b..a93781753c9582c0230f742a7578b9f49293ab1d 100644
|
| --- a/mojo/public/cpp/bindings/lib/serialization_util.h
|
| +++ b/mojo/public/cpp/bindings/lib/serialization_util.h
|
| @@ -228,6 +228,37 @@ ReturnType CallWithContext(ReturnType (*f)(ParamType),
|
| }
|
|
|
| template <typename T, typename MaybeConstUserType>
|
| +struct HasGetBeginMethod {
|
| + template <typename U>
|
| + static char Test(decltype(U::GetBegin(std::declval<MaybeConstUserType&>()))*);
|
| + template <typename U>
|
| + static int Test(...);
|
| + static const bool value = sizeof(Test<T>(0)) == sizeof(char);
|
| +
|
| + private:
|
| + EnsureTypeIsComplete<T> check_t_;
|
| +};
|
| +
|
| +template <
|
| + typename Traits,
|
| + typename MaybeConstUserType,
|
| + typename std::enable_if<
|
| + HasGetBeginMethod<Traits, MaybeConstUserType>::value>::type* = nullptr>
|
| +decltype(Traits::GetBegin(std::declval<MaybeConstUserType&>()))
|
| +CallGetBeginIfExists(MaybeConstUserType& input) {
|
| + return Traits::GetBegin(input);
|
| +}
|
| +
|
| +template <
|
| + typename Traits,
|
| + typename MaybeConstUserType,
|
| + typename std::enable_if<
|
| + !HasGetBeginMethod<Traits, MaybeConstUserType>::value>::type* = nullptr>
|
| +size_t CallGetBeginIfExists(MaybeConstUserType& input) {
|
| + return 0;
|
| +}
|
| +
|
| +template <typename T, typename MaybeConstUserType>
|
| struct HasGetDataMethod {
|
| template <typename U>
|
| static char Test(decltype(U::GetData(std::declval<MaybeConstUserType&>()))*);
|
|
|