Skip to content

Won't build under clang #24

@FlyinCow

Description

@FlyinCow

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions