Code Monkey home page Code Monkey logo

udrefl's Introduction


 __    __   _______  .______       _______  _______  __      
|  |  |  | |       \ |   _  \     |   ____||   ____||  |     
|  |  |  | |  .--.  ||  |_)  |    |  |__   |  |__   |  |     
|  |  |  | |  |  |  ||      /     |   __|  |   __|  |  |     
|  `--'  | |  '--'  ||  |\  \----.|  |____ |  |     |  `----.
 \______/  |_______/ | _| `._____||_______||__|     |_______|
                                                             

repo-size tag license

⭐ Star us on GitHub — it helps!

UDRefl

Ubpa Dynamic Reflection

Extremely fast and powerful C++20 dynamic reflection library

Documentaion ->

How to Use

the example code is here, other examples is here

Suppose you need to reflect struct Vec

struct Vec {
  float x;
  float y;
  float norm() const {
    return std::sqrt(x * x + y * y);
  }
};

Manual registration

Mngr.RegisterType<Vec>();
Mngr.AddField<&Vec::x>("x");
Mngr.AddField<&Vec::y>("y");
Mngr.AddMethod<&Vec::norm>("norm");

Iterate over members

for (auto&& [name, info] : FieldRange_of<Vec>)
  std::cout << name.GetView() << std::endl;

for (auto&& [name, info] : MethodRange_of<Vec>)
  std::cout << name.GetView() << std::endl;

Constructing types

SharedObject v = Mngr.MakeShared(Type_of<Vec>);
std::cout << v.GetType().GetName() << std::endl; // prints "Vec"

Set/get variables

v.Var("x") = 3;
v.Var("y") = 4;
std::cout << "x: " << v.Var("x") << std::endl;

Invoke Methods

std::cout << "norm: " << v.Invoke("norm") << std::endl;

Iterate over variables

for (auto&& [name, var] : v.GetVars())
  std::cout << name.GetView() << ": " << var << std::endl;

other example

Features

  • global fields, methods or enums
  • classes with single-, multiple- and virtual-inheritance
  • constructors (arbitrary argument count) and destructors
  • methods (virtual, abstract, overloaded, arbitrary argument count) : you can pass arguments by a buffer (on stack or heap)
  • ability to invoke methods of classes from any arbitrary class level
  • argument type auto convertion when invoking method
  • no header pollution: the reflection information is created in the cpp file to minimize compile time when modifying the data
  • working with custom types without the need of having the declaration of the type available at compile time (useful for plugins)
  • possibility to add additional attribute to all reflection objects
  • reference
  • pointer, array
  • standard container, iterator
  • meta function
    • operations: operator +, operator-, ...
    • container: begin, end, empty, size, ...
  • bootstrap
  • no macro usage
  • no rtti required
  • no exceptions (this feature come with cost and is also regularly disabled on consoles)
  • no external compiler or tool needed, only standard ISO C++20

Compiler compatibility

  • Clang/LLVM >= 10.0
  • GCC >= 10.0
  • MSVC >= 1926

Tested platforms:

  • Windows 10: VS2019 16.8.5

  • Ubuntu 20: GCC 10.2, Clang 11.0

  • MacOS 11.0 : GCC 10.2

    AppleClang 12 and Clang 11 is not supported

Licensing

You can copy and paste the license summary from below.

MIT License

Copyright (c) 2020 Ubpa

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

udrefl's People

Contributors

spriteovo avatar ubpa avatar zerger avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

udrefl's Issues

Ubuntu无法运行

如果是我操作问题我先表示抱歉,不过建议作者能够将各个平台运行的教程附上...

下面是运行 test/00_readme 的情况

====================[ 构建 | UDRefl_test_00_readme | Debug ]======================
/home/life4gal/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/203.5981.166/bin/cmake/linux/bin/cmake --build /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug --target UDRefl_test_00_readme -- -j 6
Scanning dependencies of target UContainer_core
[  9%] Building CXX object _deps/ucontainer-build/src/core/CMakeFiles/UContainer_core.dir/VarSizeAllocMngr.cpp.o
[ 18%] Linking CXX static library ../../../ucontainer-src/lib/libUContainer_cored.a
[ 18%] Built target UContainer_core
Scanning dependencies of target UDRefl_core
[ 27%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx.gch
c++: error: /permissive-: 没有那个文件或目录
gmake[3]: *** [src/core/CMakeFiles/UDRefl_core.dir/build.make:84:src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx.gch] 错误 1
gmake[2]: *** [CMakeFiles/Makefile2:1404:src/core/CMakeFiles/UDRefl_core.dir/all] 错误 2
gmake[1]: *** [CMakeFiles/Makefile2:1439:src/test/00_readme/CMakeFiles/UDRefl_test_00_readme.dir/rule] 错误 2
gmake: *** [Makefile:418:UDRefl_test_00_readme] 错误 2

其实在载入项目时就有很多错误(最下面有2张截图)

/home/life4gal/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/203.5981.166/bin/cmake/linux/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /home/life4gal/Code/Cpp/UDRefl
-- The C compiler identification is GNU 10.2.0
-- The CXX compiler identification is GNU 10.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- [Project] UDRefl
-- find package: UCMake 0.6.3
-- UCMake 0.6.3 not found
-- fetch: https://github.com/Ubpa/UCMake with tag 0.6.3
-- [Project] UCMake 0.6.3
-- include UbpaInit.cmake
-- include UbpaBasic.cmake
-- include UbpaBuild.cmake
-- include UbpaDownload.cmake
-- include UbpaGit.cmake
-- include UbpaPackage.cmake
-- include UbpaQt.cmake
-- ----------
-- - name: UCMake_test_00_Basic
-- - folder : UCMake/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/CPM.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/UbpaBasic.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/UbpaBuild.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/UbpaDownload.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/UbpaGit.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/UbpaInit.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/UbpaPackage.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/cmake/UbpaQt.cmake
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucmake-src/src/test/00_Basic/main.cpp
-- ----------
-- export UCMake_0_6_3
-- UCMake 0.6.3 build done
-- start add dependence UContainer 0.0.9
-- find package: UContainer 0.0.9
-- UContainer 0.0.9 not found
-- fetch: https://github.com/Ubpa/UContainer with tag 0.0.9
-- [Project] UContainer
-- find package: UCMake 0.6.3
-- UCMake 0.6.3 not found
-- fetch: https://github.com/Ubpa/UCMake with tag 0.6.3
-- UCMake 0.6.3 build done
-- ----------
-- - name: UContainer_core
-- - folder : UContainer/
-- - mode: STATIC
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include/UContainer/Algorithm.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include/UContainer/Align.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include/UContainer/Pool.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include/UContainer/Span.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include/UContainer/VarSizeAllocMngr.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include/UContainer/details/Algorithm.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include/UContainer/details/Pool.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/src/core/VarSizeAllocMngr.cpp
-- - inc (public):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include
-- ----------
-- ----------
-- - name: UContainer_test_00_Pool
-- - folder : UContainer/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/src/test/00_Pool/main.cpp
-- - lib (public):
--   * UContainer_core
-- ----------
-- ----------
-- - name: UContainer_test_01_Algorithm_00_Set
-- - folder : UContainer/test/01_Algorithm
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/src/test/01_Algorithm/00_Set/main.cpp
-- - lib (public):
--   * UContainer_core
-- ----------
-- ----------
-- - name: UContainer_test_02_VarSizeAllocMngr
-- - folder : UContainer/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/src/test/02_VarSizeAllocMngr/main.cpp
-- - lib (public):
--   * UContainer_core
-- ----------
-- ----------
-- - name: UContainer_test_03_Span
-- - folder : UContainer/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/src/test/03_Span/main.cpp
-- - lib (public):
--   * UContainer_core
-- ----------
-- export UContainer_0_0_9
-- UContainer 0.0.9 build done
-- start add dependence UTemplate 0.5.1
-- find package: UTemplate 0.5.1
-- UTemplate 0.5.1 not found
-- fetch: https://github.com/Ubpa/UTemplate with tag 0.5.1
-- [Project] UTemplate
-- find package: UCMake 0.6.3
-- UCMake 0.6.3 not found
-- fetch: https://github.com/Ubpa/UCMake with tag 0.6.3
-- UCMake 0.6.3 build done
-- ----------
-- - name: UTemplate_EMPTY
-- - folder : UTemplate/
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/Func.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/Name.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/SI.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/TSTR.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/TemplateList.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/TypeID.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/TypeList.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/Util.h
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/details/Func.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/details/Name.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/details/SI.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/details/TemplateList.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/details/ToTTType.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/details/TypeList.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include/UTemplate/details/Util.inl
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/EMPTY/EMPTY.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_core
-- - folder : UTemplate/
-- - mode: INTERFACE
-- - inc interface:
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include
-- - compile option interface:
--   * /permissive-
-- ----------
-- ----------
-- - name: UTemplate_test_01_TStr
-- - folder : UTemplate/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/01_TStr/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_02_List_01_TypeList
-- - folder : UTemplate/test/02_List
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/02_List/01_TypeList/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_02_List_02_TemplateList
-- - folder : UTemplate/test/02_List
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/02_List/02_TemplateList/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_02_List_03_Sort
-- - folder : UTemplate/test/02_List
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/02_List/03_Sort/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_03_SI
-- - folder : UTemplate/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/03_SI/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_06_TypeID
-- - folder : UTemplate/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/06_TypeID/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_07_Func_00_FuncTraits
-- - folder : UTemplate/test/07_Func
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/07_Func/00_FuncTraits/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_07_Func_01_FuncExpand
-- - folder : UTemplate/test/07_Func
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/07_Func/01_FuncExpand/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_10_Name
-- - folder : UTemplate/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/10_Name/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- ----------
-- - name: UTemplate_test_11_NameTratis
-- - folder : UTemplate/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/src/test/11_NameTratis/main.cpp
-- - lib (public):
--   * Ubpa::UTemplate_core
-- ----------
-- export UTemplate_0_5_1
-- UTemplate 0.5.1 build done
-- ----------
-- - name: UDRefl_core
-- - folder : UDRefl/
-- - mode: STATIC
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/AttrSet.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/BaseInfo.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Basic.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/FieldInfo.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/FieldPtr.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/IDRegistry.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/MethodInfo.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/MethodPtr.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/ReflMngr.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/TypeInfo.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/UDRefl.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Util.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/attrs/ContainerType.h
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/attrs/details/ContainerType.inl
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/details/IDRegistry.inl
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/details/Object.inl
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/details/ReflMngr.inl
--   * /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/details/Util.inl
--   * /home/life4gal/Code/Cpp/UDRefl/src/core/FieldPtr.cpp
--   * /home/life4gal/Code/Cpp/UDRefl/src/core/IDRegistry.cpp
--   * /home/life4gal/Code/Cpp/UDRefl/src/core/MethodPtr.cpp
--   * /home/life4gal/Code/Cpp/UDRefl/src/core/Object.cpp
--   * /home/life4gal/Code/Cpp/UDRefl/src/core/ReflMngr.cpp
-- - lib (public):
--   * Ubpa::UContainer_core
--   * Ubpa::UTemplate_core
-- - inc (public):
--   * /home/life4gal/Code/Cpp/UDRefl/include
-- ----------
-- ----------
-- - name: UDRefl_pch
-- - folder : UDRefl/
-- - mode: INTERFACE
-- - lib interface:
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_00_readme
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/00_readme/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_01_basic
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/01_basic/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_02_const_static
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/02_const_static/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_03_method
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/03_method/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_04_enum
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/04_enum/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_05_overload
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/05_overload/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_06_inheritance
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/06_inheritance/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_07_virtual
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/07_virtual/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_08_attr
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/08_attr/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_09_lifecycle
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/09_lifecycle/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_10_dynamic
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/10_dynamic/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_11_MInvoke
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/11_MInvoke/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_12_Meta
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/12_Meta/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_13_ref
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/13_ref/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- ----------
-- ----------
-- - name: UDRefl_test_14_pch
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/14_pch/A.cpp
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/14_pch/A.h
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/14_pch/B.cpp
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/14_pch/B.h
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/14_pch/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- - compile option (public):
--   * /bigobj
-- ----------
-- ----------
-- - name: UDRefl_test_15_serializer
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/15_serializer/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- - compile option (public):
--   * /bigobj
-- ----------
-- ----------
-- - name: UDRefl_test_16_container
-- - folder : UDRefl/test
-- - mode: EXE
-- - sources (private):
--   * /home/life4gal/Code/Cpp/UDRefl/src/test/16_container/main.cpp
-- - lib (public):
--   * Ubpa::UDRefl_core
-- - compile option (public):
--   * /bigobj
-- ----------
-- export UDRefl_0_5_1
-- [Dependencies]
-- - UContainer 0.0.9
-- - UTemplate 0.5.1
-- Configuring done
-- Generating done
-- Build files have been written to: /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug

无法获取编译器信息:
	编译器退出,错误代码 1: /usr/bin/c++ -xc++ -I/home/life4gal/Code/Cpp/UDRefl/include -I/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include -I/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include -g -std=gnu++17 -Winvalid-pch -include /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx -fpch-preprocess -v -dD -E
	Using built-in specs.
	COLLECT_GCC=/usr/bin/c++
	OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
	OFFLOAD_TARGET_DEFAULT=1
	Target: x86_64-linux-gnu
	Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.2.0-13ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
	Thread model: posix
	Supported LTO compression algorithms: zlib zstd
	gcc version 10.2.0 (Ubuntu 10.2.0-13ubuntu1) 
	COLLECT_GCC_OPTIONS='-I' '/home/life4gal/Code/Cpp/UDRefl/include' '-I' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include' '-I' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include' '-g' '-std=gnu++17' '-Winvalid-pch' '-include' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx' '-fpch-preprocess' '-v' '-dD' '-E' '-D' '___CIDR_DEFINITIONS_END' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
	 /usr/lib/gcc/x86_64-linux-gnu/10/cc1plus -E -quiet -v @/tmp/ccF9uOGE -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D ___CIDR_DEFINITIONS_END -include /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx /tmp/compiler-file11515843544366005300 -mtune=generic -march=x86-64 -std=gnu++17 -Winvalid-pch -fpch-preprocess -g -fworking-directory -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -dD
	ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/10"
	ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
	ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/include-fixed"
	ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
	#include "..." search starts here:
	#include <...> search starts here:
	 /home/life4gal/Code/Cpp/UDRefl/include
	 /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include
	 /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include
	 /usr/include/c++/10
	 /usr/include/x86_64-linux-gnu/c++/10
	 /usr/include/c++/10/backward
	 /usr/lib/gcc/x86_64-linux-gnu/10/include
	 /usr/local/include
	 /usr/include/x86_64-linux-gnu
	 /usr/include
	End of search list.
	In file included from /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/AttrSet.h:3,
	                 from /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/UDRefl.h:3,
	                 from /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx:5,
	                 from <command-line>:
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:173:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  173 |   OBJECT_PTR_DEFINE_OPERATOR(+, add)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:174:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  174 |   OBJECT_PTR_DEFINE_OPERATOR(-, sub)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:175:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  175 |   OBJECT_PTR_DEFINE_OPERATOR(*, mul)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:176:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  176 |   OBJECT_PTR_DEFINE_OPERATOR(/, div)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:177:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  177 |   OBJECT_PTR_DEFINE_OPERATOR(%, mod)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:178:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  178 |   OBJECT_PTR_DEFINE_OPERATOR(&, band)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:179:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  179 |   OBJECT_PTR_DEFINE_OPERATOR(|, bor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:180:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  180 |   OBJECT_PTR_DEFINE_OPERATOR(^, bxor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:182:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  182 |   OBJECT_PTR_DEFINE_OPERATOR([], subscript)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:183:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  183 |   OBJECT_PTR_DEFINE_OPERATOR(->*, member_of_pointer)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:185:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  185 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(==, eq);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:186:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  186 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(!=, ne);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:187:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  187 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(< , lt);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:188:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  188 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(<=, le);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:189:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  189 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(> , gt);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:190:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  190 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(>=, ge);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:396:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  396 |   OBJECT_PTR_DEFINE_OPERATOR(=, assign)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:397:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  397 |   OBJECT_PTR_DEFINE_OPERATOR(+=, assign_add)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:398:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  398 |   OBJECT_PTR_DEFINE_OPERATOR(-=, assign_sub)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:399:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  399 |   OBJECT_PTR_DEFINE_OPERATOR(*=, assign_mul)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:400:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  400 |   OBJECT_PTR_DEFINE_OPERATOR(/=, assign_div)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:401:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  401 |   OBJECT_PTR_DEFINE_OPERATOR(%=, assign_mod)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:402:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  402 |   OBJECT_PTR_DEFINE_OPERATOR(&=, assign_band)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:403:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  403 |   OBJECT_PTR_DEFINE_OPERATOR(|=, assign_bor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:404:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  404 |   OBJECT_PTR_DEFINE_OPERATOR(^=, assign_bxor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:405:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  405 |   OBJECT_PTR_DEFINE_OPERATOR(<<=, assign_lshift)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:406:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  406 |   OBJECT_PTR_DEFINE_OPERATOR(>>=, assign_rshift)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:408:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  408 |   OBJECT_PTR_DEFINE_OPERATOR([], subscript)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:409:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  409 |   OBJECT_PTR_DEFINE_OPERATOR(->*, member_of_pointer)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:531:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  531 |   SHARED_OBJECT_DEFINE_OPERATOR(+)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:531:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  531 |   SHARED_OBJECT_DEFINE_OPERATOR(+)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:532:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  532 |   SHARED_OBJECT_DEFINE_OPERATOR(-)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:532:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  532 |   SHARED_OBJECT_DEFINE_OPERATOR(-)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:533:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  533 |   SHARED_OBJECT_DEFINE_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:533:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  533 |   SHARED_OBJECT_DEFINE_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:534:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  534 |   SHARED_OBJECT_DEFINE_OPERATOR(/)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:534:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  534 |   SHARED_OBJECT_DEFINE_OPERATOR(/)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:535:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  535 |   SHARED_OBJECT_DEFINE_OPERATOR(%)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:535:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  535 |   SHARED_OBJECT_DEFINE_OPERATOR(%)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:536:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  536 |   SHARED_OBJECT_DEFINE_OPERATOR(&)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:536:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  536 |   SHARED_OBJECT_DEFINE_OPERATOR(&)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:537:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  537 |   SHARED_OBJECT_DEFINE_OPERATOR(|)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:537:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  537 |   SHARED_OBJECT_DEFINE_OPERATOR(|)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:538:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  538 |   SHARED_OBJECT_DEFINE_OPERATOR(^)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:538:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  538 |   SHARED_OBJECT_DEFINE_OPERATOR(^)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:540:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  540 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(==)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:540:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  540 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(==)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:541:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  541 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(!=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:541:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  541 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(!=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:542:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  542 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:542:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  542 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:543:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  543 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:543:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  543 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:544:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  544 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:544:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  544 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:545:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  545 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:545:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  545 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:547:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  547 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:547:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  547 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:548:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  548 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:548:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  548 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:748:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  748 |   SHARED_OBJECT_DEFINE_OPERATOR(=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:748:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  748 |   SHARED_OBJECT_DEFINE_OPERATOR(=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:749:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  749 |   SHARED_OBJECT_DEFINE_OPERATOR(+=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:749:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  749 |   SHARED_OBJECT_DEFINE_OPERATOR(+=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:750:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  750 |   SHARED_OBJECT_DEFINE_OPERATOR(-=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:750:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  750 |   SHARED_OBJECT_DEFINE_OPERATOR(-=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:751:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  751 |   SHARED_OBJECT_DEFINE_OPERATOR(*=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:751:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  751 |   SHARED_OBJECT_DEFINE_OPERATOR(*=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:752:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  752 |   SHARED_OBJECT_DEFINE_OPERATOR(/=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:752:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  752 |   SHARED_OBJECT_DEFINE_OPERATOR(/=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:753:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  753 |   SHARED_OBJECT_DEFINE_OPERATOR(%=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:753:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  753 |   SHARED_OBJECT_DEFINE_OPERATOR(%=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:754:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  754 |   SHARED_OBJECT_DEFINE_OPERATOR(&=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:754:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  754 |   SHARED_OBJECT_DEFINE_OPERATOR(&=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:755:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  755 |   SHARED_OBJECT_DEFINE_OPERATOR(|=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:755:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  755 |   SHARED_OBJECT_DEFINE_OPERATOR(|=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:756:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  756 |   SHARED_OBJECT_DEFINE_OPERATOR(^=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:756:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  756 |   SHARED_OBJECT_DEFINE_OPERATOR(^=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:757:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  757 |   SHARED_OBJECT_DEFINE_OPERATOR(<<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:757:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  757 |   SHARED_OBJECT_DEFINE_OPERATOR(<<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:758:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  758 |   SHARED_OBJECT_DEFINE_OPERATOR(>>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:758:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  758 |   SHARED_OBJECT_DEFINE_OPERATOR(>>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:760:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  760 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:760:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  760 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:761:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  761 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:761:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  761 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:763:3: error: pasting "operator" and "++" does not give a valid preprocessing token
	  763 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(++)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:763:3: error: pasting "operator" and "++" does not give a valid preprocessing token
	  763 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(++)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:764:3: error: pasting "operator" and "--" does not give a valid preprocessing token
	  764 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(--)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:764:3: error: pasting "operator" and "--" does not give a valid preprocessing token
	  764 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(--)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:768:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  768 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:768:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  768 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	
	
	编译器退出,错误代码 1: /usr/bin/c++ -xc++ -I/home/life4gal/Code/Cpp/UDRefl/include -I/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include -I/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include -g -std=gnu++17 -Winvalid-pch -x c++-header -include /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx -fpch-preprocess -v -dD -E
	Using built-in specs.
	COLLECT_GCC=/usr/bin/c++
	OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
	OFFLOAD_TARGET_DEFAULT=1
	Target: x86_64-linux-gnu
	Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.2.0-13ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
	Thread model: posix
	Supported LTO compression algorithms: zlib zstd
	gcc version 10.2.0 (Ubuntu 10.2.0-13ubuntu1) 
	COLLECT_GCC_OPTIONS='-I' '/home/life4gal/Code/Cpp/UDRefl/include' '-I' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include' '-I' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include' '-g' '-std=gnu++17' '-Winvalid-pch' '-include' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx' '-fpch-preprocess' '-v' '-dD' '-E' '-D' '___CIDR_DEFINITIONS_END' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
	 /usr/lib/gcc/x86_64-linux-gnu/10/cc1plus -E -quiet -v @/tmp/ccZsNjRx -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D ___CIDR_DEFINITIONS_END -include /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx /tmp/compiler-file11515843544366005300 -mtune=generic -march=x86-64 -std=gnu++17 -Winvalid-pch -fpch-preprocess -g -fworking-directory -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -dD
	ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/10"
	ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
	ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/include-fixed"
	ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
	#include "..." search starts here:
	#include <...> search starts here:
	 /home/life4gal/Code/Cpp/UDRefl/include
	 /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include
	 /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include
	 /usr/include/c++/10
	 /usr/include/x86_64-linux-gnu/c++/10
	 /usr/include/c++/10/backward
	 /usr/lib/gcc/x86_64-linux-gnu/10/include
	 /usr/local/include
	 /usr/include/x86_64-linux-gnu
	 /usr/include
	End of search list.
	In file included from /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/AttrSet.h:3,
	                 from /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/UDRefl.h:3,
	                 from /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx:5,
	                 from <command-line>:
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:173:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  173 |   OBJECT_PTR_DEFINE_OPERATOR(+, add)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:174:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  174 |   OBJECT_PTR_DEFINE_OPERATOR(-, sub)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:175:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  175 |   OBJECT_PTR_DEFINE_OPERATOR(*, mul)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:176:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  176 |   OBJECT_PTR_DEFINE_OPERATOR(/, div)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:177:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  177 |   OBJECT_PTR_DEFINE_OPERATOR(%, mod)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:178:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  178 |   OBJECT_PTR_DEFINE_OPERATOR(&, band)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:179:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  179 |   OBJECT_PTR_DEFINE_OPERATOR(|, bor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:180:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  180 |   OBJECT_PTR_DEFINE_OPERATOR(^, bxor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:182:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  182 |   OBJECT_PTR_DEFINE_OPERATOR([], subscript)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:183:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  183 |   OBJECT_PTR_DEFINE_OPERATOR(->*, member_of_pointer)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:185:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  185 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(==, eq);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:186:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  186 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(!=, ne);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:187:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  187 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(< , lt);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:188:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  188 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(<=, le);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:189:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  189 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(> , gt);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:190:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  190 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(>=, ge);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:396:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  396 |   OBJECT_PTR_DEFINE_OPERATOR(=, assign)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:397:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  397 |   OBJECT_PTR_DEFINE_OPERATOR(+=, assign_add)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:398:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  398 |   OBJECT_PTR_DEFINE_OPERATOR(-=, assign_sub)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:399:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  399 |   OBJECT_PTR_DEFINE_OPERATOR(*=, assign_mul)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:400:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  400 |   OBJECT_PTR_DEFINE_OPERATOR(/=, assign_div)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:401:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  401 |   OBJECT_PTR_DEFINE_OPERATOR(%=, assign_mod)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:402:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  402 |   OBJECT_PTR_DEFINE_OPERATOR(&=, assign_band)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:403:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  403 |   OBJECT_PTR_DEFINE_OPERATOR(|=, assign_bor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:404:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  404 |   OBJECT_PTR_DEFINE_OPERATOR(^=, assign_bxor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:405:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  405 |   OBJECT_PTR_DEFINE_OPERATOR(<<=, assign_lshift)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:406:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  406 |   OBJECT_PTR_DEFINE_OPERATOR(>>=, assign_rshift)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:408:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  408 |   OBJECT_PTR_DEFINE_OPERATOR([], subscript)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:409:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  409 |   OBJECT_PTR_DEFINE_OPERATOR(->*, member_of_pointer)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:531:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  531 |   SHARED_OBJECT_DEFINE_OPERATOR(+)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:531:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  531 |   SHARED_OBJECT_DEFINE_OPERATOR(+)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:532:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  532 |   SHARED_OBJECT_DEFINE_OPERATOR(-)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:532:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  532 |   SHARED_OBJECT_DEFINE_OPERATOR(-)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:533:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  533 |   SHARED_OBJECT_DEFINE_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:533:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  533 |   SHARED_OBJECT_DEFINE_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:534:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  534 |   SHARED_OBJECT_DEFINE_OPERATOR(/)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:534:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  534 |   SHARED_OBJECT_DEFINE_OPERATOR(/)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:535:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  535 |   SHARED_OBJECT_DEFINE_OPERATOR(%)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:535:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  535 |   SHARED_OBJECT_DEFINE_OPERATOR(%)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:536:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  536 |   SHARED_OBJECT_DEFINE_OPERATOR(&)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:536:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  536 |   SHARED_OBJECT_DEFINE_OPERATOR(&)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:537:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  537 |   SHARED_OBJECT_DEFINE_OPERATOR(|)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:537:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  537 |   SHARED_OBJECT_DEFINE_OPERATOR(|)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:538:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  538 |   SHARED_OBJECT_DEFINE_OPERATOR(^)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:538:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  538 |   SHARED_OBJECT_DEFINE_OPERATOR(^)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:540:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  540 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(==)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:540:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  540 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(==)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:541:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  541 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(!=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:541:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  541 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(!=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:542:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  542 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:542:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  542 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:543:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  543 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:543:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  543 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:544:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  544 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:544:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  544 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:545:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  545 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:545:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  545 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:547:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  547 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:547:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  547 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:548:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  548 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:548:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  548 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:748:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  748 |   SHARED_OBJECT_DEFINE_OPERATOR(=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:748:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  748 |   SHARED_OBJECT_DEFINE_OPERATOR(=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:749:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  749 |   SHARED_OBJECT_DEFINE_OPERATOR(+=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:749:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  749 |   SHARED_OBJECT_DEFINE_OPERATOR(+=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:750:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  750 |   SHARED_OBJECT_DEFINE_OPERATOR(-=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:750:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  750 |   SHARED_OBJECT_DEFINE_OPERATOR(-=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:751:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  751 |   SHARED_OBJECT_DEFINE_OPERATOR(*=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:751:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  751 |   SHARED_OBJECT_DEFINE_OPERATOR(*=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:752:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  752 |   SHARED_OBJECT_DEFINE_OPERATOR(/=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:752:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  752 |   SHARED_OBJECT_DEFINE_OPERATOR(/=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:753:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  753 |   SHARED_OBJECT_DEFINE_OPERATOR(%=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:753:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  753 |   SHARED_OBJECT_DEFINE_OPERATOR(%=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:754:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  754 |   SHARED_OBJECT_DEFINE_OPERATOR(&=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:754:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  754 |   SHARED_OBJECT_DEFINE_OPERATOR(&=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:755:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  755 |   SHARED_OBJECT_DEFINE_OPERATOR(|=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:755:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  755 |   SHARED_OBJECT_DEFINE_OPERATOR(|=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:756:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  756 |   SHARED_OBJECT_DEFINE_OPERATOR(^=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:756:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  756 |   SHARED_OBJECT_DEFINE_OPERATOR(^=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:757:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  757 |   SHARED_OBJECT_DEFINE_OPERATOR(<<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:757:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  757 |   SHARED_OBJECT_DEFINE_OPERATOR(<<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:758:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  758 |   SHARED_OBJECT_DEFINE_OPERATOR(>>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:758:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  758 |   SHARED_OBJECT_DEFINE_OPERATOR(>>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:760:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  760 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:760:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  760 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:761:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  761 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:761:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  761 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:763:3: error: pasting "operator" and "++" does not give a valid preprocessing token
	  763 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(++)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:763:3: error: pasting "operator" and "++" does not give a valid preprocessing token
	  763 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(++)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:764:3: error: pasting "operator" and "--" does not give a valid preprocessing token
	  764 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(--)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:764:3: error: pasting "operator" and "--" does not give a valid preprocessing token
	  764 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(--)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:768:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  768 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:768:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  768 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	
	
	编译器退出,错误代码 1: /usr/bin/c++ -xc++ -I/home/life4gal/Code/Cpp/UDRefl/include -I/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include -I/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include -g -std=gnu++17 -Winvalid-pch -include /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx -fpch-preprocess -v -dD -E
	Using built-in specs.
	COLLECT_GCC=/usr/bin/c++
	OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
	OFFLOAD_TARGET_DEFAULT=1
	Target: x86_64-linux-gnu
	Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.2.0-13ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
	Thread model: posix
	Supported LTO compression algorithms: zlib zstd
	gcc version 10.2.0 (Ubuntu 10.2.0-13ubuntu1) 
	COLLECT_GCC_OPTIONS='-I' '/home/life4gal/Code/Cpp/UDRefl/include' '-I' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include' '-I' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include' '-g' '-std=gnu++17' '-Winvalid-pch' '-include' '/home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx' '-fpch-preprocess' '-v' '-dD' '-E' '-D' '___CIDR_DEFINITIONS_END' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
	 /usr/lib/gcc/x86_64-linux-gnu/10/cc1plus -E -quiet -v @/tmp/cctOPLAO -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D ___CIDR_DEFINITIONS_END -include /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx /tmp/compiler-file11515843544366005300 -mtune=generic -march=x86-64 -std=gnu++17 -Winvalid-pch -fpch-preprocess -g -fworking-directory -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -dD
	ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/10"
	ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
	ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/include-fixed"
	ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
	#include "..." search starts here:
	#include <...> search starts here:
	 /home/life4gal/Code/Cpp/UDRefl/include
	 /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/ucontainer-src/include
	 /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/_deps/utemplate-src/include
	 /usr/include/c++/10
	 /usr/include/x86_64-linux-gnu/c++/10
	 /usr/include/c++/10/backward
	 /usr/lib/gcc/x86_64-linux-gnu/10/include
	 /usr/local/include
	 /usr/include/x86_64-linux-gnu
	 /usr/include
	End of search list.
	In file included from /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/AttrSet.h:3,
	                 from /home/life4gal/Code/Cpp/UDRefl/include/UDRefl/UDRefl.h:3,
	                 from /home/life4gal/Code/Cpp/UDRefl/cmake-build-debug/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx:5,
	                 from <command-line>:
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:173:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  173 |   OBJECT_PTR_DEFINE_OPERATOR(+, add)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:174:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  174 |   OBJECT_PTR_DEFINE_OPERATOR(-, sub)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:175:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  175 |   OBJECT_PTR_DEFINE_OPERATOR(*, mul)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:176:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  176 |   OBJECT_PTR_DEFINE_OPERATOR(/, div)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:177:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  177 |   OBJECT_PTR_DEFINE_OPERATOR(%, mod)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:178:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  178 |   OBJECT_PTR_DEFINE_OPERATOR(&, band)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:179:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  179 |   OBJECT_PTR_DEFINE_OPERATOR(|, bor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:180:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  180 |   OBJECT_PTR_DEFINE_OPERATOR(^, bxor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:182:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  182 |   OBJECT_PTR_DEFINE_OPERATOR([], subscript)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:183:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  183 |   OBJECT_PTR_DEFINE_OPERATOR(->*, member_of_pointer)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:185:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  185 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(==, eq);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:186:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  186 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(!=, ne);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:187:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  187 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(< , lt);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:188:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  188 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(<=, le);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:189:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  189 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(> , gt);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:190:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  190 |   OBJECT_PTR_DEFINE_CMP_OPERATOR(>=, ge);
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:396:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  396 |   OBJECT_PTR_DEFINE_OPERATOR(=, assign)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:397:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  397 |   OBJECT_PTR_DEFINE_OPERATOR(+=, assign_add)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:398:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  398 |   OBJECT_PTR_DEFINE_OPERATOR(-=, assign_sub)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:399:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  399 |   OBJECT_PTR_DEFINE_OPERATOR(*=, assign_mul)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:400:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  400 |   OBJECT_PTR_DEFINE_OPERATOR(/=, assign_div)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:401:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  401 |   OBJECT_PTR_DEFINE_OPERATOR(%=, assign_mod)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:402:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  402 |   OBJECT_PTR_DEFINE_OPERATOR(&=, assign_band)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:403:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  403 |   OBJECT_PTR_DEFINE_OPERATOR(|=, assign_bor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:404:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  404 |   OBJECT_PTR_DEFINE_OPERATOR(^=, assign_bxor)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:405:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  405 |   OBJECT_PTR_DEFINE_OPERATOR(<<=, assign_lshift)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:406:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  406 |   OBJECT_PTR_DEFINE_OPERATOR(>>=, assign_rshift)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:408:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  408 |   OBJECT_PTR_DEFINE_OPERATOR([], subscript)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:409:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  409 |   OBJECT_PTR_DEFINE_OPERATOR(->*, member_of_pointer)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:531:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  531 |   SHARED_OBJECT_DEFINE_OPERATOR(+)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:531:3: error: pasting "operator" and "+" does not give a valid preprocessing token
	  531 |   SHARED_OBJECT_DEFINE_OPERATOR(+)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:532:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  532 |   SHARED_OBJECT_DEFINE_OPERATOR(-)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:532:3: error: pasting "operator" and "-" does not give a valid preprocessing token
	  532 |   SHARED_OBJECT_DEFINE_OPERATOR(-)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:533:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  533 |   SHARED_OBJECT_DEFINE_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:533:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  533 |   SHARED_OBJECT_DEFINE_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:534:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  534 |   SHARED_OBJECT_DEFINE_OPERATOR(/)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:534:3: error: pasting "operator" and "/" does not give a valid preprocessing token
	  534 |   SHARED_OBJECT_DEFINE_OPERATOR(/)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:535:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  535 |   SHARED_OBJECT_DEFINE_OPERATOR(%)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:535:3: error: pasting "operator" and "%" does not give a valid preprocessing token
	  535 |   SHARED_OBJECT_DEFINE_OPERATOR(%)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:536:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  536 |   SHARED_OBJECT_DEFINE_OPERATOR(&)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:536:3: error: pasting "operator" and "&" does not give a valid preprocessing token
	  536 |   SHARED_OBJECT_DEFINE_OPERATOR(&)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:537:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  537 |   SHARED_OBJECT_DEFINE_OPERATOR(|)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:537:3: error: pasting "operator" and "|" does not give a valid preprocessing token
	  537 |   SHARED_OBJECT_DEFINE_OPERATOR(|)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:538:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  538 |   SHARED_OBJECT_DEFINE_OPERATOR(^)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:538:3: error: pasting "operator" and "^" does not give a valid preprocessing token
	  538 |   SHARED_OBJECT_DEFINE_OPERATOR(^)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:540:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  540 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(==)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:540:3: error: pasting "operator" and "==" does not give a valid preprocessing token
	  540 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(==)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:541:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  541 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(!=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:541:3: error: pasting "operator" and "!=" does not give a valid preprocessing token
	  541 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(!=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:542:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  542 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:542:3: error: pasting "operator" and ">" does not give a valid preprocessing token
	  542 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:543:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  543 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:543:3: error: pasting "operator" and ">=" does not give a valid preprocessing token
	  543 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:544:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  544 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:544:3: error: pasting "operator" and "<" does not give a valid preprocessing token
	  544 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:545:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  545 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:545:3: error: pasting "operator" and "<=" does not give a valid preprocessing token
	  545 |   SHARED_OBJECT_DEFINE_CMP_OPERATOR(<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:547:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  547 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:547:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  547 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:548:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  548 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:548:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  548 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:748:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  748 |   SHARED_OBJECT_DEFINE_OPERATOR(=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:748:3: error: pasting "operator" and "=" does not give a valid preprocessing token
	  748 |   SHARED_OBJECT_DEFINE_OPERATOR(=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:749:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  749 |   SHARED_OBJECT_DEFINE_OPERATOR(+=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:749:3: error: pasting "operator" and "+=" does not give a valid preprocessing token
	  749 |   SHARED_OBJECT_DEFINE_OPERATOR(+=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:750:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  750 |   SHARED_OBJECT_DEFINE_OPERATOR(-=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:750:3: error: pasting "operator" and "-=" does not give a valid preprocessing token
	  750 |   SHARED_OBJECT_DEFINE_OPERATOR(-=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:751:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  751 |   SHARED_OBJECT_DEFINE_OPERATOR(*=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:751:3: error: pasting "operator" and "*=" does not give a valid preprocessing token
	  751 |   SHARED_OBJECT_DEFINE_OPERATOR(*=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:752:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  752 |   SHARED_OBJECT_DEFINE_OPERATOR(/=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:752:3: error: pasting "operator" and "/=" does not give a valid preprocessing token
	  752 |   SHARED_OBJECT_DEFINE_OPERATOR(/=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:753:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  753 |   SHARED_OBJECT_DEFINE_OPERATOR(%=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:753:3: error: pasting "operator" and "%=" does not give a valid preprocessing token
	  753 |   SHARED_OBJECT_DEFINE_OPERATOR(%=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:754:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  754 |   SHARED_OBJECT_DEFINE_OPERATOR(&=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:754:3: error: pasting "operator" and "&=" does not give a valid preprocessing token
	  754 |   SHARED_OBJECT_DEFINE_OPERATOR(&=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:755:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  755 |   SHARED_OBJECT_DEFINE_OPERATOR(|=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:755:3: error: pasting "operator" and "|=" does not give a valid preprocessing token
	  755 |   SHARED_OBJECT_DEFINE_OPERATOR(|=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:756:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  756 |   SHARED_OBJECT_DEFINE_OPERATOR(^=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:756:3: error: pasting "operator" and "^=" does not give a valid preprocessing token
	  756 |   SHARED_OBJECT_DEFINE_OPERATOR(^=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:757:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  757 |   SHARED_OBJECT_DEFINE_OPERATOR(<<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:757:3: error: pasting "operator" and "<<=" does not give a valid preprocessing token
	  757 |   SHARED_OBJECT_DEFINE_OPERATOR(<<=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:758:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  758 |   SHARED_OBJECT_DEFINE_OPERATOR(>>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:758:3: error: pasting "operator" and ">>=" does not give a valid preprocessing token
	  758 |   SHARED_OBJECT_DEFINE_OPERATOR(>>=)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:760:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  760 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:760:3: error: pasting "operator" and "[" does not give a valid preprocessing token
	  760 |   SHARED_OBJECT_DEFINE_OPERATOR([])
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:761:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  761 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:761:3: error: pasting "operator" and "->*" does not give a valid preprocessing token
	  761 |   SHARED_OBJECT_DEFINE_OPERATOR(->*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:763:3: error: pasting "operator" and "++" does not give a valid preprocessing token
	  763 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(++)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:763:3: error: pasting "operator" and "++" does not give a valid preprocessing token
	  763 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(++)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:764:3: error: pasting "operator" and "--" does not give a valid preprocessing token
	  764 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(--)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:764:3: error: pasting "operator" and "--" does not give a valid preprocessing token
	  764 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(--)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:768:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  768 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/home/life4gal/Code/Cpp/UDRefl/include/UDRefl/Object.h:768:3: error: pasting "operator" and "*" does not give a valid preprocessing token
	  768 |   SHARED_OBJECT_DEFINE_UNARY_OPERATOR(*)
	      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	
	

收集编译器信息时遇到问题:
	c++: error: /permissive-: No such file or directory
	c++: error: /bigobj: No such file or directory

[无法重新加载]

附一张截图
error
error1

未知来源头文件doctest.hpp导致编译失败

未知来源头文件doctest.hpp导致编译失败

描述

于今日使用git clone https://github.com/Ubpa/UDRefl获取最新源码进行编译
编译选项使用cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/output/ . && make -j4
但在编译时发生错误,具体为编译依赖项目USmallFlat的测试用例01_basic/main.cpp引用了头文件doctest.hpp导致错误。
其提示为altStackMemory的大小不是一个常量表达式,经查发现宏SIGSTKSZ不存在。
随后在其USmallFat仓库内发现doctest.hpp已加入.gitignore内并且不存在于仓库内。随即检查USmallFlatUDRefl内所引用的git tag版本均为2.3.0。故只能判断doctest.hpp属于未知来源引入

错误信息

编译日志
子项目USmallFlat版本

➜  usmallflat-src git:(488d1f6) git tag | more
0.1.0
0.2.0
0.2.1
0.2.2
0.2.3

编译日志

discaz@discaz-usb: ~/projects/test/xrepo_package_maker/kkls/UDRefl master ⚡ $ make -j4                                                               [16:42:16]
[  2%] Building CXX object _deps/ucmake-build/src/test/04_dll/gen/CMakeFiles/UCMake_test_04_dll_gen.dir/mul.cpp.o
[  2%] Building CXX object _deps/ucmake-build/src/test/03_lib/gen/CMakeFiles/UCMake_test_03_lib_gen.dir/add.cpp.o
[  2%] Building CXX object _deps/ucmake-build/src/EMPTY/CMakeFiles/UCMake_EMPTY.dir/main.cpp.o
[  2%] Building CXX object _deps/ucmake-build/src/test/02_cpp20/CMakeFiles/UCMake_test_02_cpp20.dir/main.cpp.o
[  3%] Linking CXX executable ../../../ucmake-src/bin/UCMake_EMPTY
[  4%] Linking CXX static library ../../../../../ucmake-src/lib/libUCMake_test_03_lib_gen.a
[  4%] Linking CXX shared library ../../../../../ucmake-src/bin/libUCMake_test_04_dll_gen.so
[  4%] Built target UCMake_test_03_lib_gen
[  4%] Built target UCMake_EMPTY
[  4%] Built target UCMake_test_04_dll_gen
[  4%] Building CXX object _deps/ucmake-build/src/test/05_dll_class/classic/gen/CMakeFiles/UCMake_test_05_dll_class_classic_gen.dir/MyClass.cpp.o
[  4%] Building CXX object _deps/ucmake-build/src/test/05_dll_class/virtual/gen/CMakeFiles/UCMake_test_05_dll_class_virtual_gen.dir/MyClass.cpp.o
[  5%] Building CXX object _deps/ucmake-build/src/test/06_static_shared/gen/CMakeFiles/UCMake_test_06_static_shared_gen_static.dir/mul.cpp.o
[  5%] Linking CXX static library ../../../../../ucmake-src/lib/libUCMake_test_06_static_shared_gen_static.a
[  5%] Built target UCMake_test_06_static_shared_gen_static
[  5%] Building CXX object _deps/ucmake-build/src/test/06_static_shared/gen/CMakeFiles/UCMake_test_06_static_shared_gen_shared.dir/mul.cpp.o
[  6%] Linking CXX shared library ../../../../../ucmake-src/bin/libUCMake_test_06_static_shared_gen_shared.so
[  6%] Built target UCMake_test_06_static_shared_gen_shared
[  7%] Building CXX object _deps/ucmake-build/src/test/06_static_shared/use_static/CMakeFiles/UCMake_test_06_static_shared_use_static.dir/main.cpp.o
[  8%] Linking CXX executable ../../../../ucmake-src/bin/UCMake_test_02_cpp20
[  8%] Built target UCMake_test_02_cpp20
[  9%] Linking CXX shared library ../../../../../../ucmake-src/bin/libUCMake_test_05_dll_class_classic_gen.so
[  9%] Building CXX object _deps/utemplate-build/src/EMPTY/CMakeFiles/UTemplate_EMPTY.dir/EMPTY.cpp.o
[ 10%] Linking CXX executable ../../../../bin/UTemplate_EMPTY
[ 11%] Linking CXX shared library ../../../../../../ucmake-src/bin/libUCMake_test_05_dll_class_virtual_gen.so
[ 11%] Built target UCMake_test_05_dll_class_classic_gen
[ 11%] Building CXX object _deps/utemplate-build/src/test/01_TStr/CMakeFiles/UTemplate_test_01_TStr.dir/main.cpp.o
[ 11%] Built target UTemplate_EMPTY
[ 12%] Building CXX object _deps/utemplate-build/src/test/02_List/01_TypeList/CMakeFiles/UTemplate_test_02_List_01_TypeList.dir/main.cpp.o
[ 12%] Built target UCMake_test_05_dll_class_virtual_gen
[ 13%] Building CXX object _deps/utemplate-build/src/test/02_List/02_TemplateList/CMakeFiles/UTemplate_test_02_List_02_TemplateList.dir/main.cpp.o
[ 14%] Linking CXX executable ../../../../../ucmake-src/bin/UCMake_test_06_static_shared_use_static
[ 14%] Built target UCMake_test_06_static_shared_use_static
[ 15%] Building CXX object _deps/utemplate-build/src/test/02_List/03_Sort/CMakeFiles/UTemplate_test_02_List_03_Sort.dir/main.cpp.o
[ 15%] Linking CXX executable ../../../../../../bin/UTemplate_test_02_List_02_TemplateList
[ 15%] Built target UTemplate_test_02_List_02_TemplateList
[ 15%] Building CXX object _deps/utemplate-build/src/test/03_SI/CMakeFiles/UTemplate_test_03_SI.dir/main.cpp.o
[ 16%] Linking CXX executable ../../../../../bin/UTemplate_test_01_TStr
[ 16%] Linking CXX executable ../../../../../../bin/UTemplate_test_02_List_01_TypeList
[ 16%] Built target UTemplate_test_01_TStr
[ 17%] Building CXX object _deps/utemplate-build/src/test/06_TypeID/CMakeFiles/UTemplate_test_06_TypeID.dir/main.cpp.o
[ 17%] Built target UTemplate_test_02_List_01_TypeList
[ 18%] Building CXX object _deps/utemplate-build/src/test/07_Func/00_FuncTraits/CMakeFiles/UTemplate_test_07_Func_00_FuncTraits.dir/main.cpp.o
[ 19%] Linking CXX executable ../../../../../bin/UTemplate_test_03_SI
[ 20%] Linking CXX executable ../../../../../../bin/UTemplate_test_02_List_03_Sort
[ 20%] Built target UTemplate_test_03_SI
[ 21%] Building CXX object _deps/utemplate-build/src/test/07_Func/01_FuncExpand/CMakeFiles/UTemplate_test_07_Func_01_FuncExpand.dir/main.cpp.o
[ 21%] Built target UTemplate_test_02_List_03_Sort
[ 21%] Building CXX object _deps/utemplate-build/src/test/10_Name/CMakeFiles/UTemplate_test_10_Name.dir/main.cpp.o
[ 21%] Linking CXX executable ../../../../../../bin/UTemplate_test_07_Func_00_FuncTraits
[ 21%] Built target UTemplate_test_07_Func_00_FuncTraits
[ 21%] Linking CXX executable ../../../../../bin/UTemplate_test_06_TypeID
[ 21%] Building CXX object _deps/utemplate-build/src/test/11_NameTratis/CMakeFiles/UTemplate_test_11_NameTratis.dir/main.cpp.o
[ 21%] Built target UTemplate_test_06_TypeID
[ 22%] Building CXX object _deps/utemplate-build/src/test/12_Type/CMakeFiles/UTemplate_test_12_Type.dir/main.cpp.o
[ 23%] Linking CXX executable ../../../../../../bin/UTemplate_test_07_Func_01_FuncExpand
[ 23%] Built target UTemplate_test_07_Func_01_FuncExpand
[ 24%] Building CXX object _deps/utemplate-build/src/test/13_StdName/CMakeFiles/UTemplate_test_13_StdName.dir/main.cpp.o
[ 24%] Linking CXX executable ../../../../../bin/UTemplate_test_12_Type
[ 25%] Linking CXX executable ../../../../../bin/UTemplate_test_11_NameTratis
[ 25%] Built target UTemplate_test_12_Type
[ 26%] Building CXX object _deps/usmallflat-build/src/EMPTY/CMakeFiles/USmallFlat_EMPTY.dir/EMPTY.cpp.o
[ 27%] Linking CXX executable ../../../../bin/USmallFlat_EMPTY
[ 27%] Built target UTemplate_test_11_NameTratis
[ 27%] Building CXX object _deps/usmallflat-build/src/test/01_basic/CMakeFiles/USmallFlat_test_01_basic.dir/main.cpp.o
[ 27%] Built target USmallFlat_EMPTY
[ 28%] Building CXX object _deps/usmallflat-build/src/test/02_benchmark/CMakeFiles/USmallFlat_test_02_benchmark.dir/main.cpp.o
[ 29%] Linking CXX executable ../../../../../bin/UTemplate_test_13_StdName
[ 30%] Linking CXX executable ../../../../../bin/UTemplate_test_10_Name
[ 30%] Built target UTemplate_test_13_StdName
[ 30%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/FieldPtr.cpp.o
[ 30%] Built target UTemplate_test_10_Name
[ 31%] Building CXX object _deps/ucmake-build/src/test/03_lib/use/CMakeFiles/UCMake_test_03_lib_use.dir/main.cpp.o
[ 31%] Linking CXX executable ../../../../../ucmake-src/bin/UCMake_test_03_lib_use
[ 31%] Built target UCMake_test_03_lib_use
[ 32%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/IDRegistry.cpp.o
In file included from /home/discaz/projects/test/xrepo_package_maker/kkls/UDRefl/_deps/usmallflat-src/src/test/01_basic/main.cpp:2:
/home/discaz/projects/test/xrepo_package_maker/kkls/UDRefl/_deps/usmallflat-src/src/test/01_basic/doctest.hpp:4011:47: 错误:数组‘altStackMem’的大小不是一个整数常表达式
 4011 |         static char             altStackMem[4 * SIGSTKSZ];
      |                                               ^
[ 33%] Linking CXX executable ../../../../../bin/USmallFlat_test_02_benchmark
make[2]: *** [_deps/usmallflat-build/src/test/01_basic/CMakeFiles/USmallFlat_test_01_basic.dir/build.make:76:_deps/usmallflat-build/src/test/01_basic/CMakeFiles/USmallFlat_test_01_basic.dir/main.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:2367:_deps/usmallflat-build/src/test/01_basic/CMakeFiles/USmallFlat_test_01_basic.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....
[ 34%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/InvokeUtil.cpp.o
[ 34%] Built target USmallFlat_test_02_benchmark
[ 34%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/MethodPtr.cpp.o
[ 35%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/Object.cpp.o
[ 35%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngr.cpp.o
[ 36%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_0.cpp.o
[ 37%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_1.cpp.o
[ 37%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_2.cpp.o
[ 38%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_3.cpp.o
[ 38%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_4.cpp.o
[ 39%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_5.cpp.o
[ 40%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_6.cpp.o
[ 40%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ReflMngrInitUtil/ReflMngrInitUtil_7.cpp.o
[ 41%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ranges/FieldRange.cpp.o
[ 42%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ranges/MethodRange.cpp.o
[ 42%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ranges/ObjectTree.cpp.o
[ 43%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ranges/VarRange.cpp.o
[ 43%] Linking CXX static library ../../lib/libUDRefl_core.a
[ 43%] Built target UDRefl_core
make: *** [Makefile:136:all] 错误 2
FAIL: 2

隐式类型转换问题

1. 隐式转换问题

有如下代码:
例1:

struct A {
    Glib::ustring value;
};
// register ....
a.Var("value") = "ABC"; // 赋值失败
a.Var("value") = Glib::ustring("ABC"); // 赋值成功

以及UDRefl测试用例UDRefl_test_21_string中第28行

auto str = Mngr.MakeShared(Type_of<std::string>, TempArgsView{ "hello world" }); // 无效对象 没有GetName空串
auto str = Mngr.MakeShared(Type_of<std::string>, TempArgsView{ std::string("hello world") });// 有效

所以我猜测UDRefl对于类型的隐式转换处理稍有不足,建议在存在隐式类型转换调用时给予warning

代码能力不足,给不出建议LOL

项目构建失败

1. 目标环境

System:    Host: discaz-usb Kernel: 5.9.16-1-MANJARO x86_64 bits: 64 Desktop: MATE 1.24.1 Distro: Manjaro Linux 

cmake version 3.19.6
gcc (GCC) 10.2.0


* commit d18d2c2819ea4a840a85f32fcd0f55965f6dd46e (HEAD -> master, origin/master, origin/dev, origin/HEAD)
shared (4 天前) <ubpa>

2. 问题

1. 编译时宏变量替换失败

cmake .  && make

/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/_deps/ucmake-src/src/test/04_dll/use_c_dynamicload/main.c: 在函数‘main’中:
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/_deps/ucmake-src/src/test/04_dll/use_c_dynamicload/main.c:27:60: 错误:expected ‘,’ or ‘;’ before ‘UCMAKE_CONFIG_POSTFIX’
   27 |  const char soname[] = "./" "lib" "UCMake_test_04_dll_gen" UCMAKE_CONFIG_POSTFIX ".so";
      |                                                            ^~~~~~~~~~~~~~~~~~~~~

/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/_deps/ucmake-src/src/test目录删除后,仍无法通过编译。根据分析是/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/_deps/usmallvector-src/include/fixed_vector.h忘记添加头文件#include <cstring>
最后一个是

In file included from /home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/UDRefl.h:4,
                 from /home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx:5,
                 from <命令行>:
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/common.h:13:3: 错误:为‘operator==’指定了存储类
   13 |   UDRefl_core_API friend bool operator==(const Derived& lhs, const Derived& rhs) {
      |   ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/ObjectTree.h:29:4: 错误:为‘operator==’指定了存储类
   29 |    UDRefl_core_API friend bool operator==(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/ObjectTree.h:30:4: 错误:为‘operator!=’指定了存储类
   30 |    UDRefl_core_API friend bool operator!=(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/FieldRange.h:24:4: 错误:为‘operator==’指定了存储类
   24 |    UDRefl_core_API friend bool operator==(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/FieldRange.h:25:4: 错误:为‘operator!=’指定了存储类
   25 |    UDRefl_core_API friend bool operator!=(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/MethodRange.h:24:4: 错误:为‘operator==’指定了存储类
   24 |    UDRefl_core_API friend bool operator==(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/MethodRange.h:25:4: 错误:为‘operator!=’指定了存储类
   25 |    UDRefl_core_API friend bool operator!=(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/VarRange.h:33:4: 错误:为‘operator==’指定了存储类
   33 |    UDRefl_core_API friend bool operator==(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/kkls/UDRefl/include/UDRefl/ranges/VarRange.h:34:4: 错误:为‘operator!=’指定了存储类
   34 |    UDRefl_core_API friend bool operator!=(const iterator& lhs, const iterator& rhs);
      |    ^~~~~~~~~~~~~~~

2. 编译时编译目标程序的 NDEBUG 要与库保持一致,不能混用,否则core dump。

3. 临时解决方法

1. 问题1的解决方法

使用cmake配置工程后删除UDRefl/_deps/ucmake-src/src/test目录。

再编辑UDRefl/_deps/usmallvector-src/include/fixed_vector.h头文件,添加#include <cstring>

最后在库根目录使用

sed -i "s/UDRefl_core_API/ /g" include/UDRefl/ranges/common.h
sed -i "s/UDRefl_core_API/ /g" include/UDRefl/ranges/ObjectTree.h
sed -i "s/UDRefl_core_API/ /g" include/UDRefl/ranges/FieldRange.h
sed -i "s/UDRefl_core_API/ /g" include/UDRefl/ranges/MethodRange.h
sed -i "s/UDRefl_core_API/ /g" include/UDRefl/ranges/VarRange.h

2. 问题2解决办法

我没有想好怎么解决,建议是编译两份库,带-DNDEBUG与不带-DNDEBUG的

最后我有点想法,项目以后会不会加入xmake构建支持。可以使用xmake project -k cmake生成CMakeLists文件

Stream overload functions conflict with <sstream> header file

I can't compile the latest commit, an obvious error output I can see is that the TypeID_of seems to be undefined, I'm not sure if it's my own mistake. (I figured it out, I forgot to update the submodules, and I will try again later)
So I'm using 0.5.1, but the error output for this issue is also reproduced in the latest commit.

Minimal Reproducible Example on MSVC:

#include <sstream>
#include <UDRefl/UDRefl.h>

int main()
{
    std::ostringstream Stream;
    Stream << "test";
}

Output

1>\UDRefl_test\UDRefl_test.cpp(61,21): error C2666: 'operator <<': 6 overloads have similar conversions
1>\MSVC\14.28.29333\include\ostream(465,39): message : could be 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_streambuf<char,std::char_traits<char>> *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(440,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(const void *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(422,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long double)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(404,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(double)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(386,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(float)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(368,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned __int64)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(350,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(__int64)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(332,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned long)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(314,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(295,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned int)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(269,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(int)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(250,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned short)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(216,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(short)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(198,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(bool)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(193,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(188,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ios<char,std::char_traits<char>> &(__cdecl *)(std::basic_ios<char,std::char_traits<char>> &))' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(183,39): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ostream<char,std::char_traits<char>> &(__cdecl *)(std::basic_ostream<char,std::char_traits<char>> &))' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(460,20): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<<void>(std::nullptr_t)' (compiling source file UDRefl_test.cpp)
1>\UDRefl\include\UDRefl\details\Object.inl(393,4): message : or       'T &operator <<<std::ostringstream,0>(T &,const Ubpa::UDRefl::SharedObject &)'
1>        with
1>        [
1>            T=std::ostringstream
1>        ] (compiling source file UDRefl_test.cpp)
1>\UDRefl\include\UDRefl\details\Object.inl(353,4): message : or       'T &operator <<<std::ostringstream,0>(T &,const Ubpa::UDRefl::SharedConstObject &)'
1>        with
1>        [
1>            T=std::ostringstream
1>        ] (compiling source file UDRefl_test.cpp)
1>\UDRefl\include\UDRefl\details\Object.inl(313,4): message : or       'T &operator <<<std::ostringstream,0>(T &,Ubpa::UDRefl::ObjectPtr)'
1>        with
1>        [
1>            T=std::ostringstream
1>        ] (compiling source file UDRefl_test.cpp)
1>\UDRefl\include\UDRefl\details\Object.inl(273,4): message : or       'T &operator <<<std::ostringstream,0>(T &,Ubpa::UDRefl::ConstObjectPtr)'
1>        with
1>        [
1>            T=std::ostringstream
1>        ] (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(653,32): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(697,32): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(733,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(778,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(816,32): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const _Elem *)'
1>        with
1>        [
1>            _Elem=char
1>        ] (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(895,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const signed char *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(901,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,signed char)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(906,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const unsigned char *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(912,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,unsigned char)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(920,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char8_t *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(926,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char8_t)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(934,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,wchar_t)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(937,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const wchar_t *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(941,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char16_t)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(943,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char32_t)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(951,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char16_t *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(953,31): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char32_t *)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\ostream(998,32): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const std::error_code &)' (compiling source file UDRefl_test.cpp)
1>\MSVC\14.28.29333\include\thread(229,26): message : or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,std::thread::id)' (compiling source file UDRefl_test.cpp)
1>\UDRefl_test\UDRefl_test.cpp(61,21): message : while trying to match the argument list '(std::ostringstream, const char [5])'
1>Done building project "UDRefl_test.vcxproj" -- FAILED.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

继承类的转换

如何使得传入 T* 也能正确调用函数?

#include <UDRefl/UDRefl.hpp>

#include <iostream>
#include <cmath>

using namespace Ubpa;
using namespace Ubpa::UDRefl;

struct B {
};

struct T : public B {
};

struct Vec {
    void myFunc(B *b) const noexcept {
        printf("========== pointer = %p\n", b);
    }
};

int main() {
    { // register Vec
        Mngr.RegisterType<Vec>();
        Mngr.AddMethod<&Vec::myFunc>("myFunc");
    }

    auto v = Mngr.MakeShared(Type_of<Vec>);

    // OK
    B b;
    v.Invoke("myFunc", TempArgsView{ &b });

    // Fail
    T t;
    v.Invoke("myFunc", TempArgsView{ &t });

    return 0;
}

编译错误

文件漏提交了吗

[ 48%] Building CXX object _deps/usmallflat-build/src/test/01_basic/CMakeFiles/USmallFlat_test_01_basic.dir/test_access.cpp.o
/home/jun/下载/UDRefl-master/build/_deps/usmallflat-src/src/test/01_basic/test_access.cpp:1:10: fatal error: doctest.hpp: 没有那个文件或目录
1 | #include "doctest.hpp"
| ^~~~~~~~~~~~~
compilation terminated.

生成静态库与自举Bootstrap编译选项冲突

问题

在指定生成静态库时Bootstrap库和部分用例编译失败
配置选项cmake -DCMAKE_BUILD_TYPE=Debug -DUbpa_UDRefl_Build_Shared=OFF -DUbpa_UDRefl_Build_ext_Bootstrap=ON -DUbpa_UDRefl_include_all_StdName=ON -DCMAKE_INSTALL_PREFIX=/home/discaz/Project/test/xrepo_package_maker/kkls/l/UDRefl/output -DCMAKE_EXPORT_COMPILE_COMMANDS=YES .
编译结果:

......
[ 19%] Building CXX object src/core/CMakeFiles/UDRefl_core.dir/ranges/VarRange.cpp.o
[ 20%] Linking CXX static library ../../lib/libUDRefl_core.a
[ 20%] Built target UDRefl_core
[ 21%] Building CXX object src/exe_pch/CMakeFiles/UDRefl_exe_pch.dir/EMPTY.cpp.o
[ 22%] Building CXX object src/test/02_const_static/CMakeFiles/UDRefl_test_02_const_static.dir/main.cpp.o
[ 23%] Building CXX object src/test/00_readme/CMakeFiles/UDRefl_test_00_readme.dir/main.cpp.o
[ 24%] Building CXX object src/test/01_basic/CMakeFiles/UDRefl_test_01_basic.dir/main.cpp.o
[ 25%] Building CXX object src/ext/Bootstrap/CMakeFiles/UDRefl_ext_Bootstrap.dir/Bootstrap.cpp.o
cc1plus: 警告:/home/discaz/Project/test/xrepo_package_maker/UDRefl/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx.gch:created and used with different settings of %<-fpie%>
[ 26%] Linking CXX executable ../../bin/UDRefl_exe_pch
[ 26%] Built target UDRefl_exe_pch
[ 27%] Building CXX object src/test/03_method/CMakeFiles/UDRefl_test_03_method.dir/main.cpp.o
[ 28%] Building CXX object src/ext/Bootstrap/CMakeFiles/UDRefl_ext_Bootstrap.dir/Bootstrap_helper_basic.cpp.o
cc1plus: 警告:/home/discaz/Project/test/xrepo_package_maker/UDRefl/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx.gch:created and used with different settings of %<-fpie%>
[ 29%] Linking CXX executable ../../../bin/UDRefl_test_01_basic
[ 29%] Built target UDRefl_test_01_basic
[ 30%] Building CXX object src/test/04_enum/CMakeFiles/UDRefl_test_04_enum.dir/main.cpp.o
[ 31%] Linking CXX executable ../../../bin/UDRefl_test_00_readme
[ 32%] Linking CXX executable ../../../bin/UDRefl_test_02_const_static
[ 32%] Built target UDRefl_test_00_readme
[ 33%] Building CXX object src/test/05_overload/CMakeFiles/UDRefl_test_05_overload.dir/main.cpp.o
[ 33%] Built target UDRefl_test_02_const_static
[ 34%] Building CXX object src/test/06_inheritance/CMakeFiles/UDRefl_test_06_inheritance.dir/main.cpp.o
[ 35%] Linking CXX executable ../../../bin/UDRefl_test_03_method
[ 35%] Built target UDRefl_test_03_method
[ 36%] Building CXX object src/ext/Bootstrap/CMakeFiles/UDRefl_ext_Bootstrap.dir/Bootstrap_helper_info_0.cpp.o
cc1plus: 警告:/home/discaz/Project/test/xrepo_package_maker/UDRefl/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx.gch:created and used with different settings of %<-fpie%>
[ 37%] Linking CXX executable ../../../bin/UDRefl_test_04_enum
[ 37%] Built target UDRefl_test_04_enum
[ 38%] Building CXX object src/test/07_virtual/CMakeFiles/UDRefl_test_07_virtual.dir/main.cpp.o
[ 39%] Building CXX object src/ext/Bootstrap/CMakeFiles/UDRefl_ext_Bootstrap.dir/Bootstrap_helper_info_1.cpp.o
cc1plus: 警告:/home/discaz/Project/test/xrepo_package_maker/UDRefl/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx.gch:created and used with different settings of %<-fpie%>

......

src/ext/Bootstrap/CMakeFiles/UDRefl_ext_Bootstrap.dir/Bootstrap_helper_utemplate.cpp.o
cc1plus: 警告:/home/discaz/Project/test/xrepo_package_maker/UDRefl/src/core/CMakeFiles/UDRefl_core.dir/cmake_pch.hxx.gch:created and used with different settings of %<-fpie%>
[ 98%] Linking CXX shared library ../../../bin/libUDRefl_ext_Bootstrap.so
/usr/bin/ld: ../../../lib/libUDRefl_core.a(ReflMngrInitUtil_5.cpp.o): warning: relocation against `_ZTIZN4Ubpa6UDRefl7details20wrap_member_functionIZNS1_24TypeAutoRegister_DefaultIPKcE3runERNS0_8ReflMngrEEUlRKS5_SA_E26_EEDaOT_EUlPvSE_NS0_8ArgsViewEE_' in read-only section `.text._ZNSt17_Function_handlerIFvPvS0_N4Ubpa6UDRefl8ArgsViewEEZNS2_7details20wrap_member_functionIZNS5_24TypeAutoRegister_DefaultIPKcE3runERNS2_8ReflMngrEEUlRKS9_SE_E26_EEDaOT_EUlS0_S0_S3_E_E10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation[_ZNSt17_Function_handlerIFvPvS0_N4Ubpa6UDRefl8ArgsViewEEZNS2_7details20wrap_member_functionIZNS5_24TypeAutoRegister_DefaultIPKcE3runERNS2_8ReflMngrEEUlRKS9_SE_E26_EEDaOT_EUlS0_S0_S3_E_E10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation]'
/usr/bin/ld: ../../../lib/libUDRefl_core.a(IDRegistry.cpp.o): relocation R_X86_64_PC32 against symbol `_ZTVNSt3pmr25monotonic_buffer_resourceE@@GLIBCXX_3.4.28' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: bad value
collect2: 错误:ld 返回 1
make[2]: *** [src/ext/Bootstrap/CMakeFiles/UDRefl_ext_Bootstrap.dir/build.make:429:bin/libUDRefl_ext_Bootstrap.so] 错误 1
make[1]: *** [CMakeFiles/Makefile2:776:src/ext/Bootstrap/CMakeFiles/UDRefl_ext_Bootstrap.dir/all] 错误 2
make: *** [Makefile:149:all] 错误 2

其中有

[ 20%] Linking CXX static library ../../lib/libUDRefl_core.a
[ 20%] Built target UDRefl_core
...
 ✘ discaz@discaz-usb  ~/Project/test/xrepo_package_maker/UDRefl   master ±  ll lib/
总用量 88M
-rw-r--r-- 1 discaz discaz 9.0M  4月  1 17:51 libUDRefl_core.a
-rw-r--r-- 1 discaz discaz  79M  4月  1 17:34 libUDRefl_cored.a

以查看03_method用例compile_commands的信息有

discaz@discaz-usb  ~/Project/test/xrepo_package_maker/UDRefl   master ±  grep -nr "03_method"  compile_commands.json
218:  "directory": "/home/discaz/Project/test/xrepo_package_maker/UDRefl/src/test/03_method",
219:  "command": "/usr/bin/c++ -DUBPA_UDREFL_INCLUDE_ALL_STD_NAME -DUCMAKE_CONFIG_POSTFIX=\\\"\\\" -DUCMAKE_CONFIG_RELEASE -I/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UCMake_0_6_4/include -I/home/discaz/Project/test/xrepo_package_maker/UDRefl/include -isystem /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UTemplate_0_7_2/include -isystem /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/USmallFlat_0_2_2/include -O3 -DNDEBUG -Wno-attributes -std=gnu++2a -o CMakeFiles/UDRefl_test_03_method.dir/main.cpp.o -c /home/discaz/Project/test/xrepo_package_maker/UDRefl/src/test/03_method/main.cpp",
220:  "file": "/home/discaz/Project/test/xrepo_package_maker/UDRefl/src/test/03_method/main.cpp"

没有发现-fPIC选项
随后新建目录重新clone拉取,发现问题仍然复现。经过多次试验验证是编译选项Ubpa_UDRefl_Build_SharedUbpa_UDRefl_Build_ext_Bootstrap当且仅当 生成静态库并且要求启用Bootstrap 时存在冲突。

What are the advantages of UDRefl compared with RTTR and META?

I found this library from Zhihu, and I saw the author compare this library with RTTR and META there, but it was only a short description.

Would you mind explaining in more detail the differences between them?
I am choosing a reflection library recently, just out of curiosity, no offense.

Thanks in advance.

字段的类型为特定类型时,AddField函数无法通过编译

当字段类型为模板类,且这个模板类的模板参数中包括非类型模板参数,且这个参数为枚举类型时,AddField函数无法通过编译
最小示例:

#include <UDRefl/UDRefl.hpp>
using namespace Ubpa;
using namespace Ubpa::UDRefl;
enum Enum
{
	E1,
};
template<Enum e>
struct TStruct
{

};

struct MyStruct
{
	TStruct<E1> field;
};

int main()
{
	Mngr.RegisterType<MyStruct>();
	Mngr.AddField<&MyStruct::field>("field");	// 编译失败
	return 0;
}

编译器为msvc,报错信息:

D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details/Name.inl(127,5): error C2672: “concat_seq”: 未找到匹配的重载函数
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details\../TStr.hpp(194,17): message : 可能是“auto Ubpa::concat_seq(Strs...) noexcept”
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details/Name.inl(127,5): message : 未能使函数模板“auto Ubpa::concat_seq(Strs...) noexcept”专用化
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details/Name.inl(127,5): message : 用下列模板参数:
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details/Name.inl(127,5): message : “Strs={Ubpa::TStr<Ubpa::fixed_cstring<char,1>{char123,0}>, void, Ubpa::TStr<Ubpa::fixed_cstring<char,1>{char125,0}>}”
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details/Name.inl(125,1): message : 在编译 类 模板 成员函数“auto Ubpa::details::template_args_name_impl<U>::get(void) noexcept”时
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details/Name.inl(132): message : 查看对正在编译的 类 模板 实例化“Ubpa::details::template_args_name_impl<U>”的引用
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate\details/Name.inl(191): message : 查看对正在编译的函数 模板 实例化“auto Ubpa::details::template_args_name<U>(void) noexcept”的引用
1>D:\UDRefl\build\_deps\utemplate-src\include\UTemplate/Type.hpp(205): message : 查看对正在编译的函数 模板 实例化“auto Ubpa::type_name<Value>(void) noexcept”的引用
1>D:\UDRefl\include\UDRefl\details/ReflMngr.inl(1027,6): message : 查看指向正在编译的变量模板“const Ubpa::Type Type_of<TStruct<0> >”的引用
1>D:\UDRefl\include\UDRefl\details/ReflMngr.inl(1250): message : 查看对正在编译的函数 模板 实例化“Ubpa::UDRefl::FieldPtr Ubpa::UDRefl::ReflMngr::GenerateFieldPtr<pointer-to-member(0x0),true>(void)”的引用
1>D:\UDRefl\src\test\02_const_static\main.cpp(141,33): message : 查看对正在编译的函数 模板 实例化“bool Ubpa::UDRefl::ReflMngr::AddField<pointer-to-member(0x0),true>(Ubpa::Name,Ubpa::UDRefl::AttrSet)”的引用

关于UDRefl 无法处理CRTP类型问题

问题

在使用UDReflcpr库进行类型注册时发现无法通过编译

[test] g++ cpr_refl.cpp -std=c++2a -o cpr_refl.app  -I /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include -I /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/USmallFlat_0_2_2/include -I /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UTemplate_0_7_2/include  -l cpr -L /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/lib -l UDRefl_cored
In file included from /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Basic.hpp:3,
                 from /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/UDRefl.hpp:3,
                 from cpr_refl.cpp:1:
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp: In instantiation of ‘Ubpa::UDRefl::InheritCastFunctions Ubpa::UDRefl::inherit_cast_functions() [with Derived = cpr::Parameter; Base = cpr::CurlContainer<cpr::Parameter>]’:
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/details/ReflMngr.inl:1339:49:   required from ‘static Ubpa::UDRefl::BaseInfo Ubpa::UDRefl::ReflMngr::GenerateBaseInfo() [with Derived = cpr::Parameter; Base = cpr::CurlContainer<cpr::Parameter>]’
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/details/ReflMngr.inl:1344:85:   required from ‘bool Ubpa::UDRefl::ReflMngr::AddBases() [with Derived = cpr::Parameter; Bases = {cpr::CurlContainer<cpr::Parameter>}]’
cpr_refl.cpp:66:69:   required from here
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp:115:22: 错误:static assertion failed
  115 |   static_assert(std::is_base_of_v<Base, Derived>);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp: In instantiation of ‘constexpr auto Ubpa::UDRefl::static_cast_functor() [with From = cpr::Parameter; To = cpr::CurlContainer<cpr::Parameter>]’:
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp:142:40:   required from ‘Ubpa::UDRefl::InheritCastFunctions Ubpa::UDRefl::inherit_cast_functions() [with Derived = cpr::Parameter; Base = cpr::CurlContainer<cpr::Parameter>]’
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/details/ReflMngr.inl:1339:49:   required from ‘static Ubpa::UDRefl::BaseInfo Ubpa::UDRefl::ReflMngr::GenerateBaseInfo() [with Derived = cpr::Parameter; Base = cpr::CurlContainer<cpr::Parameter>]’
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/details/ReflMngr.inl:1344:85:   required from ‘bool Ubpa::UDRefl::ReflMngr::AddBases() [with Derived = cpr::Parameter; Bases = {cpr::CurlContainer<cpr::Parameter>}]’
cpr_refl.cpp:66:69:   required from here
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp:95:11: 错误:invalid ‘static_cast’ from type ‘cpr::Parameter*’ to type ‘cpr::CurlContainer<cpr::Parameter>*’
   95 |    return static_cast<To*>(reinterpret_cast<From*>(obj));
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp: In instantiation of ‘constexpr auto Ubpa::UDRefl::static_cast_functor() [with From = cpr::CurlContainer<cpr::Parameter>; To = cpr::Parameter]’:
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp:143:40:   required from ‘Ubpa::UDRefl::InheritCastFunctions Ubpa::UDRefl::inherit_cast_functions() [with Derived = cpr::Parameter; Base = cpr::CurlContainer<cpr::Parameter>]’
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/details/ReflMngr.inl:1339:49:   required from ‘static Ubpa::UDRefl::BaseInfo Ubpa::UDRefl::ReflMngr::GenerateBaseInfo() [with Derived = cpr::Parameter; Base = cpr::CurlContainer<cpr::Parameter>]’
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/details/ReflMngr.inl:1344:85:   required from ‘bool Ubpa::UDRefl::ReflMngr::AddBases() [with Derived = cpr::Parameter; Bases = {cpr::CurlContainer<cpr::Parameter>}]’
cpr_refl.cpp:66:69:   required from here
/home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp:95:11: 错误:invalid ‘static_cast’ from type ‘cpr::CurlContainer<cpr::Parameter>*’ to type ‘cpr::Parameter*’
In file included from /usr/include/c++/10.2.0/functional:59,
                 from /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Util.hpp:9,
                 from /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/Basic.hpp:3,
                 from /home/discaz/Project/test/xrepo_package_maker/UDRefl/output/UDRefl_0_10_4/include/UDRefl/UDRefl.hpp:3,
                 from cpr_refl.cpp:1:
/usr/include/c++/10.2.0/bits/std_function.h:601:7: 错误:‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = Ubpa::UDRefl::static_cast_functor<cpr::Parameter, cpr::CurlContainer<cpr::Parameter> >::<lambda(void*)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = void*; _ArgTypes = {void*}]’, declared using local type ‘Ubpa::UDRefl::static_cast_functor<cpr::Parameter, cpr::CurlContainer<cpr::Parameter> >::<lambda(void*)>’, is used but never defined [-fpermissive]
  601 |       function<_Res(_ArgTypes...)>::
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10.2.0/bits/std_function.h:601:7: 错误:‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = Ubpa::UDRefl::static_cast_functor<cpr::CurlContainer<cpr::Parameter>, cpr::Parameter>::<lambda(void*)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = void*; _ArgTypes = {void*}]’, declared using local type ‘Ubpa::UDRefl::static_cast_functor<cpr::CurlContainer<cpr::Parameter>, cpr::Parameter>::<lambda(void*)>’, is used but never defined [-fpermissive]

所以根据猜测是处理CRTP模板时失败

Structure member types with reference

Issue example:

#include <UDRefl/UDRefl.h>

using namespace Ubpa;
using namespace Ubpa::UDRefl;

struct TestT {
    bool Value;
};

int main()
{
    auto &Refl = ReflMngr::Instance();

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // case 1
    //

    Ubpa::Type BoolType = Type_of<bool>;

    std::cout << "Bool name: " << BoolType.GetName() << '\n';
    std::cout << "Is it <bool> ? " << std::boolalpha << BoolType.Is<bool>() << "\n\n";

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // case 2
    //

    Refl.RegisterType<TestT>();
    Refl.AddField<&TestT::Value>("Value");

    TestT Test;
    ObjectView Object{Test};

    Object.ForEachVar(
        [](TypeRef Type, FieldRef Field, ObjectView Obj) {
            std::cout << "Field name: " << Obj.GetType().GetName() << ' ' << Field.name.GetView() << '\n';
            std::cout << "Is it <bool> ? " << std::boolalpha << Obj.GetType().Is<bool>() << "\n\n";
            return true;
        }
    );

    return 0;
}

Output:

Bool name: uint8
Is it <bool> ? true

Field name: &{uint8} Value
Is it <bool> ? false

In older versions (I tested in v0.6.1), the second case always returns true.
The behavior in the latest version (v0.8.1) is different from my expected result.

BTW, storing the name of the bool as "uint8" is a bit strange to me, can't we just store it as "bool"?

And Happy New Year~ :D

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.