LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

То есть по факту стандартная библиотека есть, но своя самописная. Ладно, убедил в возможности применения C++.

Ещё можно просто собирать С++ код с помощью gcc, clang или zig cc. (Вместо g++, clang++, zig c++)

Тогда будет ошибка линковки если будет использована какая-то фича, которая требует рантайма плюсов. Но если таких фич нет, то сборка пройдёт успешно.

$ cat main.cpp
#include <stdlib.h>

class string_view {
  [[maybe_unused]]const char* buf;
  size_t len;
   
public:
  string_view(const char* s) noexcept
     : buf(s)
     , len(0)
  {
      if (s != nullptr) {
         while(s[len] != '\0') {
           ++len;      
         }
      }
  }
  size_t size() const noexcept {
     return len;
  }
};


int main(int, char** argv)
{
        return [=]() {
            string_view sv = argv[0];
            if (sv.size() == 2u) {
               return 1;
            } else {
               return 0;
            }
        }();
}
$ zig cc -Os -std=c++20 -Weverything -Wno-c++98-compat main.cpp -fno-exceptions -fno-rtti   -static -o test.c++ -target x86_64-linux
$ strip test.c++
$ ls -l test.c++
-rw-r--r-- 1 fsb4000 fsb4000 3264 июн  6 16:35 test.c++
$ file test.c++
test.c++: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

И если какая-то фича нужна, то можно посмотреть ошибку линковки и создать свою функцию реализующую эту фичу.

А так: классы(на стеке), шаблоны, constexpr, концепты, модули, лямбды, неймспейсы не требуют рантайма плюсов…

Исходная версия fsb4000, :

То есть по факту стандартная библиотека есть, но своя самописная. Ладно, убедил в возможности применения C++.

Ещё можно просто собирать С++ код с помощью gcc, clang или zig cc. (Вместо g++, clang++, zig c++)

Тогда будет ошибка линковки если будет использована какая-то фича, которая требует рантайма плюсов. Но если таких фич нет, то сборка пройдёт успешно.

$ cat main.cpp
#include <stdlib.h>

class string_view {
  [[maybe_unused]]const char* buf;
  size_t len;

public:
  string_view(const char* s) noexcept
     : buf(s)
     , len(0)
  {
      if (s != nullptr) {
         while(s[len] != '\0') {
           ++len;
         }
      }
  }
  size_t size() const noexcept {
     return len;
  }
};


int main()
{
        return []() {
            string_view sv = "hi";
            if (sv.size() == 2u) {
               return 1;
            } else {
               return 0;
            }
        }();
}
$ zig cc -Os -std=c++20 -Weverything -Wno-c++98-compat main.cpp -fno-exceptions -fno-rtti   -static -o test.c++ -target x86_64-linux
$ strip test.c++
$ ls -l test.c++
-rw-r--r-- 1 fsb4000 fsb4000 3232 июн  6 16:35 test.c++
$ file test.c++
test.c++: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

И если какая-то фича нужна, то можно посмотреть ошибку линковки и создать свою функцию реализующую эту фичу.

А так: классы(на стеке), шаблоны, constexpr, концепты, модули, лямбды, неймспейсы не требуют рантайма плюсов…