Позвольте упростить задачу для gcc:
template
void error(Base const &... args) {} // #1
template>...>{}, int> = 0>
void error(Ts &&... args) {} #2
int main()
{
const Base b;
error(b); // call #1
}
Следуя (сложным) правилам overload_resolution
, у нас есть оба метода в качестве жизнеспособных функций обе являются шаблонными, поэтому мы используем более специализированный шаблон
Я (как clang) понимаю, что # 1 более специализирован, чем # 2, но не для gcc
Я бы сказал, gcc bug.
Позвольте упростить задачу для clang:
template
void error(Base const &... args) {} // #1
template>::value), int> = 0>
void error(Ts&&... args) {} // #2
int main()
{
Derived d;
error(d); // call #2
}
ICE всегда ошибка, так что ошибка clang.
Для разрешения # 2 является точным соответствием, тогда как # 1 требует преобразования производного класса в его базу.
gcc соглашается с тем, что # 2 называется.
Я нахожу основные проблемы, которые я имел с хешами в сравнениях:
Попытка с помощью Обзора:: модуль SHA, чтобы создать хеш для Вас и сравнить результаты с этим.
use Digest::SHA qw(hmac_sha1_hex);
my $hash = hmac_sha1_hex($data, $key);
См. документы по http://perldoc.perl.org/Digest/SHA.pdf
Подпрограмма кодирования фактически идентична в обоих сценариях (за исключением неиспользованного аргумента, переданного подпрограмме, которую я удаляю из своей пользовательской версии).
Так как Вы не сравниваете сами обзоры, но Основу 64 закодированных версии обзоров, я рекомендовал бы создать резервную копию одного шага и проверить сами обзоры. Может быть возможно, что стандартные программы Кодировки Base 64 являются неправильными.
Если Вы не можете сравнить сами обзоры, то используйте ту же стандартную программу кодирования в обеих программах и посмотрите то, что Вы получаете.
Я боюсь, что не могу помочь многому здесь, но существует определенно что-то не так с тем, что Вы отправили. Ваш сценарий в качестве примера производит другой вывод для меня и вывод, который Вы отправили, действительно не может быть корректным.
Как мог это
secret key hex: abcd...1234
когда-либо будьте результатом этого
_ascii_to_hex("blahblahblah")
Конечно, целая ascii_to_hex вещь абсолютно не важна Вашей проблеме, но она показывает, что необходимо перепроверить результаты.
Разделяй и властвуй?
Тестовые векторы в RFC являются лучшим местом для запуска. Они передавали в обоих экземплярах? Которые Вы пробовали? Если некоторая работа и другие не делают наиболее вероятная проблема состоит в том, что одни из этих двух API неправильно упорядочивают вход ключей (Подписанный по сравнению с неподписанными массивами, преобразованиями набора символов.. и т.д.)
Как в стороне его действительно трудное для помощи Вам, когда Ваш пример не имеет смысла. Поскольку другие упомянули, что шестнадцатеричное представление и тому подобное не является abc.. 123. Заставляет меня задаться вопросом, что еще в Вашем примере неточно?