diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | c/defs.h | 9 | ||||
-rw-r--r-- | c/main.cpp | 8 |
3 files changed, 9 insertions, 10 deletions
@@ -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 @@ -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 @@ -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. */ |