1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QTCONCURRENT_COMPILERTEST_H
5#define QTCONCURRENT_COMPILERTEST_H
6
7#include <QtConcurrent/qtconcurrent_global.h>
8
9#ifndef QT_NO_CONCURRENT
10
11QT_BEGIN_NAMESPACE
12
13namespace QtPrivate {
14
15 template <class T, typename = void>
16 struct IsIterable : std::false_type {};
17 template <class T>
18 struct IsIterable<T, std::void_t<decltype(std::declval<T>().begin()),
19 decltype(std::declval<T>().end())>>
20 : std::true_type
21 { };
22
23 template <class T>
24 inline constexpr bool IsIterableValue = IsIterable<T>::value;
25
26 template <class T, typename = void>
27 struct IsDereferenceable : std::false_type {};
28 template <class T>
29 struct IsDereferenceable<T, std::void_t<decltype(*std::declval<T>())>>
30 : std::true_type
31 { };
32
33 template <class T>
34 inline constexpr bool IsDereferenceableValue = IsDereferenceable<T>::value;
35}
36
37QT_END_NAMESPACE
38
39#endif // QT_NO_CONCURRENT
40
41#endif
42

source code of qtbase/src/concurrent/qtconcurrentcompilertest.h