* Get the 1-based type index of T in Types.
*/
template <typename T>
- size_t typeIndex() const {
- return dptr_detail::GetTypeIndex<T, Types...>::value;
+ uint16_t typeIndex() const {
+ return uint16_t(dptr_detail::GetTypeIndex<T, Types...>::value);
}
uint16_t index() const { return data_ >> 48; }
uintptr_t data_;
};
+template <typename Visitor, typename... Args>
+decltype(auto) apply_visitor(
+ Visitor&& visitor,
+ const DiscriminatedPtr<Args...>& variant) {
+ return variant.apply(std::forward<Visitor>(visitor));
+}
+
+template <typename Visitor, typename... Args>
+decltype(auto) apply_visitor(
+ Visitor&& visitor,
+ DiscriminatedPtr<Args...>& variant) {
+ return variant.apply(std::forward<Visitor>(visitor));
+}
+
+template <typename Visitor, typename... Args>
+decltype(auto) apply_visitor(
+ Visitor&& visitor,
+ DiscriminatedPtr<Args...>&& variant) {
+ return variant.apply(std::forward<Visitor>(visitor));
+}
+
} // namespace folly