From 72eedeb6c472fd4ee6989b687c85627eaaee286a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E5=A4=B4=E4=BA=91?= <372449116@qq.com> Date: Mon, 15 Dec 2025 11:58:13 +0000 Subject: [PATCH] fix(log): use constructor template instead of class template for initiator - src/libipc/platform/win/get_sa.h: * Change from class template to constructor template * Keep 'struct initiator' as a regular class (not template) * Make constructor a function template: template initiator(Logger const &log) * Instantiate as: static initiator handle(log); * This is valid C++ as function templates can be defined inside functions * Fixes the issue that class templates cannot be defined inside functions The constructor template approach allows proper logger passing while maintaining valid C++ syntax for local struct definitions. --- src/libipc/platform/win/get_sa.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libipc/platform/win/get_sa.h b/src/libipc/platform/win/get_sa.h index 2741459..30295db 100644 --- a/src/libipc/platform/win/get_sa.h +++ b/src/libipc/platform/win/get_sa.h @@ -8,12 +8,12 @@ namespace detail { inline LPSECURITY_ATTRIBUTES get_sa() { LIBIPC_LOG(); - template struct initiator { SECURITY_DESCRIPTOR sd_; SECURITY_ATTRIBUTES sa_; bool succ_ = false; + template initiator(Logger const &log) { if (!::InitializeSecurityDescriptor(&sd_, SECURITY_DESCRIPTOR_REVISION)) { log.error("fail InitializeSecurityDescriptor[", static_cast(::GetLastError()), "]"); @@ -30,7 +30,7 @@ inline LPSECURITY_ATTRIBUTES get_sa() { } }; - static initiator handle(log); + static initiator handle(log); return handle.succ_ ? &handle.sa_ : nullptr; }