CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(proxy CXX)
set(CMAKE_CXX_STANDARD 23)
include(FetchContent)
FetchContent_Declare(
msft_proxy4
GIT_TAG 4.0.0 # or above
GIT_REPOSITORY https://github.com/ngcpp/proxy.git
)
FetchContent_MakeAvailable(msft_proxy4)
add_executable(main main.cpp)
target_link_libraries(main PRIVATE msft_proxy4::proxy)
main.cpp (the example code in README.md):
#include <format>
#include <iostream>
#include <string>
#include <proxy/proxy.h>
struct Formattable : pro::facade_builder
::add_skill<pro::skills::format>
::build {};
int main() {
static std::string str = "Hello World";
pro::proxy<Formattable> p1 = &str;
std::cout << std::format("*p1 = {}\n", *p1); // Prints "*p1 = Hello World"
pro::proxy<Formattable> p2 = std::make_unique<int>(123);
std::cout << std::format("*p2 = {}\n", *p2); // Prints "*p2 = 123"
pro::proxy<Formattable> p3 = pro::make_proxy<Formattable>(3.14159);
std::cout << std::format("*p3 = {:.2f}\n", *p3); // Prints "*p3 = 3.14"
}
cmake config output:
[proc] 正在执行命令: /usr/sbin/cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=/usr/sbin/clang -DCMAKE_CXX_COMPILER:FILEPATH=/usr/sbin/clang++ --no-warn-unused-cli -S /home/***/workspace/proxy -B /home/***/workspace/proxy/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The CXX compiler identification is Clang 22.1.3
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Check for working CXX compiler: /usr/sbin/clang++ - skipped
[cmake] -- Detecting CXX compile features
[cmake] -- Detecting CXX compile features - done
[cmake] -- Configuring done (0.5s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: /home/**/workspace/proxy/build
cmake build output:
[main] 正在生成文件夹: /home/***/workspace/proxy/build main
[build] 正在启动生成
[proc] 正在执行命令: /usr/sbin/cmake --build /home/***/workspace/proxy/build --config Debug --target main -j 16 --
[build] [ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[build] In file included from /home/***/workspace/proxy/main.cpp:5:
[build] In file included from /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/proxy.h:7:
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:985:7: error: template 'proxy' cannot be referenced with the 'class' specifier
[build] 985 | class proxy PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:137:25: note: declared here
[build] 137 | class PRO4D_ENFORCE_EBO proxy;
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:986:5: error: expected ';' after top level declarator
[build] 986 | : public details::facade_traits<F>::direct_accessor,
[build] | ^
[build] | ;
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:986:7: error: expected unqualified-id
[build] 986 | : public details::facade_traits<F>::direct_accessor,
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1337:39: error: variable has incomplete type 'class allocated_ptr'
[build] 1337 | class PRO4D_ENFORCE_EBO allocated_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:44:29: note: expanded from macro 'PROD_TR_IF_ELIGIBLE'
[build] 44 | #define PROD_TR_IF_ELIGIBLE trivially_relocatable_if_eligible
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1337:25: note: forward declaration of 'pro::details::allocated_ptr'
[build] 1337 | class PRO4D_ENFORCE_EBO allocated_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1338:5: error: expected ';' after top level declarator
[build] 1338 | : private alloc_aware<Alloc>,
[build] | ^
[build] | ;
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1338:7: error: expected unqualified-id
[build] 1338 | : private alloc_aware<Alloc>,
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1366:19: error: redefinition of 'trivially_relocatable_if_eligible'
[build] 1366 | class compact_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:44:29: note: expanded from macro 'PROD_TR_IF_ELIGIBLE'
[build] 44 | #define PROD_TR_IF_ELIGIBLE trivially_relocatable_if_eligible
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1337:39: note: previous definition is here
[build] 1337 | class PRO4D_ENFORCE_EBO allocated_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:44:29: note: expanded from macro 'PROD_TR_IF_ELIGIBLE'
[build] 44 | #define PROD_TR_IF_ELIGIBLE trivially_relocatable_if_eligible
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1367:5: error: expected ';' after top level declarator
[build] 1367 | : public indirect_ptr<compact_ptr_storage<T, Alloc>> {
[build] | ^
[build] | ;
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1367:7: error: expected unqualified-id
[build] 1367 | : public indirect_ptr<compact_ptr_storage<T, Alloc>> {
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1399:26: error: redefinition of 'trivially_relocatable_if_eligible'
[build] 1399 | class shared_compact_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:44:29: note: expanded from macro 'PROD_TR_IF_ELIGIBLE'
[build] 44 | #define PROD_TR_IF_ELIGIBLE trivially_relocatable_if_eligible
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1337:39: note: previous definition is here
[build] 1337 | class PRO4D_ENFORCE_EBO allocated_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:44:29: note: expanded from macro 'PROD_TR_IF_ELIGIBLE'
[build] 44 | #define PROD_TR_IF_ELIGIBLE trivially_relocatable_if_eligible
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1400:5: error: expected ';' after top level declarator
[build] 1400 | : public indirect_ptr<shared_compact_ptr_storage<T, Alloc>> {
[build] | ^
[build] | ;
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1400:7: error: expected unqualified-id
[build] 1400 | : public indirect_ptr<shared_compact_ptr_storage<T, Alloc>> {
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1438:26: error: redefinition of 'trivially_relocatable_if_eligible'
[build] 1438 | class strong_compact_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:44:29: note: expanded from macro 'PROD_TR_IF_ELIGIBLE'
[build] 44 | #define PROD_TR_IF_ELIGIBLE trivially_relocatable_if_eligible
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1337:39: note: previous definition is here
[build] 1337 | class PRO4D_ENFORCE_EBO allocated_ptr PROD_TR_IF_ELIGIBLE
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:44:29: note: expanded from macro 'PROD_TR_IF_ELIGIBLE'
[build] 44 | #define PROD_TR_IF_ELIGIBLE trivially_relocatable_if_eligible
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1439:5: error: expected ';' after top level declarator
[build] 1439 | : public indirect_ptr<strong_weak_compact_ptr_storage<T, Alloc>> {
[build] | ^
[build] | ;
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1439:7: error: expected unqualified-id
[build] 1439 | : public indirect_ptr<strong_weak_compact_ptr_storage<T, Alloc>> {
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1483:7: error: template 'weak_compact_ptr' cannot be referenced with the 'class' specifier
[build] 1483 | class weak_compact_ptr PROD_TR_IF_ELIGIBLE {
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1436:7: note: declared here
[build] 1436 | class weak_compact_ptr;
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1484:1: error: expected expression
[build] 1484 | public:
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1534:40: error: expected '>'
[build] 1534 | if constexpr (proxiable<allocated_ptr<T, Alloc>, F>) {
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1534:26: note: to match this '<'
[build] 1534 | if constexpr (proxiable<allocated_ptr<T, Alloc>, F>) {
[build] | ^
[build] /home/***/workspace/proxy/build/_deps/msft_proxy4-src/include/proxy/v4/proxy.h:1534:40: error: type name requires a specifier or qualifier
[build] 1534 | if constexpr (proxiable<allocated_ptr<T, Alloc>, F>) {
[build] | ^
[build] fatal error: too many errors emitted, stopping now [-ferror-limit=]
[build] 20 errors generated.
[build] make[3]: *** [CMakeFiles/main.dir/build.make:79: CMakeFiles/main.dir/main.cpp.o] Error 1
[build] make[2]: *** [CMakeFiles/Makefile2:109: CMakeFiles/main.dir/all] Error 2
[build] make[1]: *** [CMakeFiles/Makefile2:116: CMakeFiles/main.dir/rule] Error 2
[build] make: *** [Makefile:169: main] Error 2
[proc] 命令“/usr/sbin/cmake --build /home/***/workspace/proxy/build --config Debug --target main -j 16 --”已退出,代码为 2
[driver] 生成完毕: 00:00:00.740
[build] 生成已完成,退出代码为 2
clang --version:
clang version 22.1.3
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
CMakeLists.txt:
main.cpp (the example code in README.md):
cmake config output:
cmake build output:
clang --version: