Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

#169 closed ожидается проверка (задача сдана)

ha6 super late

Reported by: Грабовой Филипп Owned by: Vladimir Rutsky
Priority: проверка Milestone:
Component: HA#6 bind Version:
Keywords: Cc:

Description


Change History (10)

comment:1 Changed 7 years ago by Грабовой Филипп

Роботик, приди!

comment:2 Changed 7 years ago by cpptester

Type: ожидается проверкаожидаются исправления

Tested revision 1066 by grabovoy.philipp.

Smoke tests

test

stage

result

info

log

run_bind_smoke_test.cpp

gcc62

WARNING

run_bind_smoke_test-gcc62.log

run

SUCCESS

valgrind

SUCCESS

run_bind_smoke_test-valgrind.log

gcc62-asan

WARNING

run_bind_smoke_test-gcc62-asan.log

asan

SUCCESS

clang-san

WARNING

run_bind_smoke_test-clang-san.log

san

SUCCESS

Common header used in some tests: common.h

comment:3 Changed 7 years ago by Грабовой Филипп

Type: ожидаются исправленияожидается проверка

comment:4 Changed 7 years ago by cpptester

Tested revision 1067 by grabovoy.philipp.

All tests passed. Good job!

comment:5 Changed 7 years ago by Vladimir Rutsky

Type: ожидается проверкаожидаются исправления

Замечания:

  1. Объявляя таким образом placeholder-ы, вы нарушаете ODR при использовании bind.hpp в нескольких единицах трансляции:
 details::placeholder<1> _1 = details::placeholder<1>();
 details::placeholder<2> _2 = details::placeholder<2>();

Попробуйте скомпилировать один выполняемый файл, слинкованный из двух cpp:

// part1.cpp
#include "bind.hpp"

int main()
{
}
// part2.cpp
#include "bind.hpp"
$ g++ -Wall -std=c++14 part1.cpp part2.cpp 
/tmp/cc1k45Xa.o:(.bss+0x0): multiple definition of `fn::_1'
/tmp/ccHNkK07.o:(.bss+0x0): first defined here
/tmp/cc1k45Xa.o:(.bss+0x1): multiple definition of `fn::_2'
/tmp/ccHNkK07.o:(.bss+0x1): first defined here
collect2: error: ld returned 1 exit status
  1. В шаблонном типе types_at_index можно обойтись без второго аргумента (bool), делая частичную специализацию только по первому аргументу.
        template <std::size_t, bool, typename>
        struct types_at_index;

        template <std::size_t Ind, typename ListType>
        struct types_at_index<Ind, true, ListType>
        {
            using type = typename types_at_index<Ind - 1, (Ind - 1 > 0), typename ListType::base_list_t>::type;
        };

        template <typename ListType>
        struct types_at_index<0, false, ListType> {
            using type = ListType;
        };

comment:6 Changed 7 years ago by cpptester

Tested revision 1069 by grabovoy.philipp.

All tests passed. Good job!

comment:7 Changed 7 years ago by Грабовой Филипп

Зачинил types_at_index статиком, как обсуждали в первой части курса — это хороший c++ style?

comment:8 Changed 7 years ago by Грабовой Филипп

Type: ожидаются исправленияожидается проверка

comment:9 in reply to:  7 Changed 7 years ago by Vladimir Rutsky

Resolution: задача сдана
Status: newclosed

Replying to grabovoy.philipp:

Зачинил types_at_index статиком, как обсуждали в первой части курса — это хороший c++ style?

Лучше обернуть в анонимный namespace, или сделать константным (тогда ODR не будет нарушен).

Решение зачтено.

comment:10 Changed 7 years ago by Vladimir Rutsky

Milestone: ha6-deadline

Milestone ha6-deadline deleted

Note: See TracTickets for help on using tickets.