aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--c/defs.h9
-rw-r--r--c/main.cpp8
3 files changed, 9 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index 202fd6e..1ab1213 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ PL = pl/cfg.pl pl/episode_data.pl pl/local_episodes.pl pl/track_episodes.pl
OBJ = $(B)common.obj $(B)datalistview.obj $(B)episodelistview.obj $(B)listview.obj $(B)pl.obj $(B)resource.obj
CC = swipl-ld
-CFLAGS += -Wall -Wpedantic -O -ld-options,-mwindows
+CFLAGS += -Wall -Wpedantic -O -cc-options,-std=c++17 -ld-options,-mwindows
CFLAGS += -DUNICODE -D_UNICODE
LDFLAGS += -lcomctl32 -luxtheme
diff --git a/c/defs.h b/c/defs.h
index ffebcb0..c8d76b3 100644
--- a/c/defs.h
+++ b/c/defs.h
@@ -2,6 +2,7 @@
#define DEFS_H
#include <memory>
+#include <optional>
#include <windows.h>
#include <commctrl.h>
#include <SWI-Prolog.h>
@@ -144,15 +145,13 @@ inline int Dpi(int i)
}
template <class T, typename ...A>
-std::unique_ptr<T> try_make_unique(A ...args)
+std::optional<T> try_make(A ...args)
{
- std::unique_ptr<T> up;
try {
- up = std::make_unique<T>(args...);
+ return T(args...);
} catch (...) {
- up = nullptr;
+ return {};
}
- return up;
}
#endif
diff --git a/c/main.cpp b/c/main.cpp
index 8bf07fb..f0adee9 100644
--- a/c/main.cpp
+++ b/c/main.cpp
@@ -35,14 +35,14 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR tszErr;
/* Set constant values. */
- if (auto upLib = try_make_unique<Library>(TEXT("uxtheme.dll")))
+ if (auto upLib = try_make<Library>(TEXT("uxtheme.dll")))
if (upLib->GetProcAddress("SetWindowTheme")) {
g_bThemes = 1;
}
g_cxVScroll = GetSystemMetrics(SM_CXVSCROLL);
/* Setup fonts. */
- if (auto upLib = try_make_unique<Library>(TEXT("User32.dll"))) {
+ if (auto upLib = try_make<Library>(TEXT("User32.dll"))) {
if (upLib->GetProcAddress("SystemParametersInfo" WA)) {
NONCLIENTMETRICS m;
m.cbSize = sizeof(NONCLIENTMETRICS);
@@ -140,8 +140,8 @@ static LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
g_hWnd = (HWND)wParam;
/* Get DPI. */
- if (auto upLib = try_make_unique<Library>(TEXT("User32.dll")))
- if (auto GetDpiForWindow = (UINT (*)(HWND))upLib->GetProcAddress("GetDpiForWindow"))
+ if (auto opLib = try_make<Library>(TEXT("User32.dll")))
+ if (auto GetDpiForWindow = (UINT (*)(HWND))opLib->GetProcAddress("GetDpiForWindow"))
g_iDPI = GetDpiForWindow(g_hWnd);
/* Create child windows. */