История изменений
Исправление 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, концепты, модули, лямбды, неймспейсы не требуют рантайма плюсов…