История изменений
Исправление shdown, (текущая версия) :
Какие методы, наркоман, оно шаблонное и полностью в заголовочном файле содержится.
$ cat foo.cpp
#include <stdio.h>
#include <stddef.h>
#if POINTER_AND_LENGTH
struct pointer_and_length
{
const char *my_ptr;
size_t my_len;
size_t size() const { return my_len; }
const char *data() const { return my_ptr; }
};
using SPAN_TYPE = pointer_and_length;
#elif STD_STRING_VIEW
#include <string_view>
using SPAN_TYPE = std::string_view;
#endif
int main()
{
const char *literal = "Hello";
SPAN_TYPE s{literal, 5};
printf("s = '%.*s'\n", (int) (s.size() < 1024 ? s.size() : 1024), s.data());
return 0;
}
$ g++ -DPOINTER_AND_LENGTH=1 -s -static -Wall -Wextra -O3 -ffunction-sections -fdata-sections -Wl,--gc-sections foo.cpp; du -ak ./a.out
672 ./a.out
$ g++ -DSTD_STRING_VIEW=1 -s -static -Wall -Wextra -O3 -ffunction-sections -fdata-sections -Wl,--gc-sections foo.cpp; du -ak ./a.out
672 ./a.outИсходная версия shdown, :
Какие методы, наркоман, оно шаблонное и в заголовочном файле определено.
$ cat foo.cpp
#include <stdio.h>
#include <stddef.h>
#if POINTER_AND_LENGTH
struct pointer_and_length
{
const char *my_ptr;
size_t my_len;
size_t size() const { return my_len; }
const char *data() const { return my_ptr; }
};
using SPAN_TYPE = pointer_and_length;
#elif STD_STRING_VIEW
#include <string_view>
using SPAN_TYPE = std::string_view;
#endif
int main()
{
const char *literal = "Hello";
SPAN_TYPE s{literal, 5};
printf("s = '%.*s'\n", (int) (s.size() < 1024 ? s.size() : 1024), s.data());
return 0;
}
$ g++ -DPOINTER_AND_LENGTH=1 -s -static -Wall -Wextra -O3 -ffunction-sections -fdata-sections -Wl,--gc-sections foo.cpp; du -ak ./a.out
672 ./a.out
$ g++ -DSTD_STRING_VIEW=1 -s -static -Wall -Wextra -O3 -ffunction-sections -fdata-sections -Wl,--gc-sections foo.cpp; du -ak ./a.out
672 ./a.out