Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Source/Checks/cm_cxx17_check.cpp
4998 views
1
#include <cstdio>
2
#include <iterator>
3
#include <memory>
4
#include <optional>
5
#include <unordered_map>
6
7
#ifdef _MSC_VER
8
# include <comdef.h>
9
#endif
10
11
template <typename T,
12
typename std::invoke_result<decltype(&T::get), T>::type = nullptr>
13
typename T::pointer get_ptr(T& item)
14
{
15
return item.get();
16
}
17
18
int main()
19
{
20
int a[] = { 0, 1, 2 };
21
auto ai = std::cbegin(a);
22
23
int b[] = { 2, 1, 0 };
24
auto bi = std::cend(b);
25
26
auto ci = std::size(a);
27
28
std::unique_ptr<int> u(new int(0));
29
30
// Intel compiler do not handle correctly 'decltype' inside 'invoke_result'
31
get_ptr(u);
32
33
#ifdef _MSC_VER
34
// clang-cl has problems instantiating this constructor in C++17 mode
35
// error: indirection requires pointer operand ('const _GUID' invalid)
36
// return *_IID;
37
IUnknownPtr ptr{};
38
IDispatchPtr disp(ptr);
39
#endif
40
41
std::optional<int> oi = 0;
42
43
return *u + *ai + *(bi - 1) + (3 - static_cast<int>(ci)) + oi.value();
44
}
45
46