/
usr
/
include
/
boost
/
hana
/
detail
/
/usr/include/boost/hana/detail
mkdir
upload
Name
Size
Mode
Actions
operators/
-
0755
rm
variadic/
-
0755
rm
algorithm.hpp
5973
0644
edit
dl
rm
any_of.hpp
1380
0644
edit
dl
rm
array.hpp
3374
0644
edit
dl
rm
canonical_constant.hpp
2700
0644
edit
dl
rm
concepts.hpp
3019
0644
edit
dl
rm
create.hpp
935
0644
edit
dl
rm
decay.hpp
1715
0644
edit
dl
rm
dispatch_if.hpp
2082
0644
edit
dl
rm
ebo.hpp
3874
0644
edit
dl
rm
fast_and.hpp
600
0644
edit
dl
rm
first_unsatisfied_index.hpp
1731
0644
edit
dl
rm
hash_table.hpp
5487
0644
edit
dl
rm
has_common_embedding.hpp
2473
0644
edit
dl
rm
has_duplicates.hpp
2337
0644
edit
dl
rm
index_if.hpp
1610
0644
edit
dl
rm
integral_constant.hpp
10052
0644
edit
dl
rm
intrinsics.hpp
1984
0644
edit
dl
rm
nested_by.hpp
1255
0644
edit
dl
rm
nested_by_fwd.hpp
1990
0644
edit
dl
rm
nested_than.hpp
854
0644
edit
dl
rm
nested_than_fwd.hpp
1624
0644
edit
dl
rm
nested_to.hpp
788
0644
edit
dl
rm
nested_to_fwd.hpp
1627
0644
edit
dl
rm
preprocessor.hpp
1435
0644
edit
dl
rm
std_common_type.hpp
1085
0644
edit
dl
rm
struct_macros.hpp
798577
0644
edit
dl
rm
type_at.hpp
1594
0644
edit
dl
rm
type_foldl1.hpp
3916
0644
edit
dl
rm
type_foldr1.hpp
3903
0644
edit
dl
rm
unpack_flatten.hpp
2416
0644
edit
dl
rm
void_t.hpp
518
0644
edit
dl
rm
wrong.hpp
861
0644
edit
dl
rm
Edit:
/usr/include/boost/hana/detail/has_duplicates.hpp
(2337B)
/*! @file Defines `boost::hana::detail::has_duplicates`. @copyright Louis Dionne 2013-2017 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_HANA_DETAIL_HAS_DUPLICATES_HPP #define BOOST_HANA_DETAIL_HAS_DUPLICATES_HPP #include <boost/hana/config.hpp> #include <boost/hana/detail/fast_and.hpp> #include <boost/hana/equal.hpp> #include <cstddef> #include <utility> BOOST_HANA_NAMESPACE_BEGIN namespace detail { template <typename T, typename ...U> constexpr std::size_t pack_count() { std::size_t c = 0; std::size_t expand[] = {0, // avoid empty array (decltype(hana::equal(std::declval<T>(), std::declval<U>()))::value ? ++c : c)... }; (void)expand; return c; } //! @ingroup group-details //! Returns whether any of the `T`s are duplicate w.r.t. `hana::equal`. //! //! In particular, this does not check whether all of the `T`s are unique //! as _types_, but rather whether they are unique when compared as //! `hana::equal(std::declval<T>(), std::declval<U>())`. This assumes //! the comparison to return an `IntegralConstant` that can be explicitly //! converted to `bool`. //! //! @note //! Since this utility is mostly used in assertions to check that there //! are no duplicates in a sequence, we expect it to return `false` most //! of the time (otherwise we will assert). Hence, this implementation is //! biased towards the fact that we __will__ have to compare every pair of //! elements in most cases, and it does not try to be lazy. //! //! @todo //! This implementation is O(n^2). We could do it in O(n), but that would //! require a more elaborate setup including storage with O(1) lookup //! (which could be based on a compile-time hash). If we implement such //! storage for associative sequences, we could use it to optimize this. template <typename ...T> struct has_duplicates { static constexpr bool value = sizeof...(T) > 0 && !detail::fast_and<(detail::pack_count<T, T...>() == 1)...>::value ; }; } BOOST_HANA_NAMESPACE_END #endif // !BOOST_HANA_DETAIL_HAS_DUPLICATES_HPP
Save
cmd:
run