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