LINUX.ORG.RU

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

Исправление 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