+ const bool ignoreEmpty = false);
+
+/*
+ * Split a string into a fixed number of string pieces and/or numeric types
+ * by delimiter. Conversions are supported for any type which folly:to<> can
+ * target, including all overloads of parseTo(). Returns 'true' if the fields
+ * were all successfully populated. Returns 'false' if there were too few
+ * fields in the input, or too many fields if exact=true. Casting exceptions
+ * will not be caught.
+ *
+ * Examples:
+ *
+ * folly::StringPiece name, key, value;
+ * if (folly::split('\t', line, name, key, value))
+ * ...
+ *
+ * folly::StringPiece name;
+ * double value;
+ * int id;
+ * if (folly::split('\t', line, name, value, id))
+ * ...
+ *
+ * The 'exact' template parameter specifies how the function behaves when too
+ * many fields are present in the input string. When 'exact' is set to its
+ * default value of 'true', a call to split will fail if the number of fields in
+ * the input string does not exactly match the number of output parameters
+ * passed. If 'exact' is overridden to 'false', all remaining fields will be
+ * stored, unsplit, in the last field, as shown below:
+ *
+ * folly::StringPiece x, y.
+ * if (folly::split<false>(':', "a:b:c", x, y))
+ * assert(x == "a" && y == "b:c");
+ *
+ * Note that this will likely not work if the last field's target is of numeric
+ * type, in which case folly::to<> will throw an exception.
+ */
+namespace detail {
+template <typename Void, typename OutputType>
+struct IsConvertible : std::false_type {};
+
+template <typename OutputType>
+struct IsConvertible<
+ void_t<decltype(parseTo(StringPiece{}, std::declval<OutputType&>()))>,
+ OutputType> : std::true_type {};
+} // namespace detail
+template <typename OutputType>
+struct IsConvertible : detail::IsConvertible<void, OutputType> {};
+
+template <bool exact = true, class Delim, class... OutputTypes>
+typename std::enable_if<
+ StrictConjunction<IsConvertible<OutputTypes>...>::value &&
+ sizeof...(OutputTypes) >= 1,
+ bool>::type
+split(const Delim& delimiter, StringPiece input, OutputTypes&... outputs);