以下代码对我有效。在VS2017和G++7.3上编译
//
// bit_tools.h
//
#include <bitset>
template <size_t sizeA, size_t sizeB, size_t sizeAB>
std::bitset<sizeAB> join2(std::bitset<sizeA> bsetA,
std::bitset<sizeB> bsetB);
//
// bit_tools.cc
//
#include "bit_tools.h"
template <size_t sizeA, size_t sizeB, size_t sizeAB>
std::bitset<sizeAB> join2(std::bitset<sizeA> bsetA, std::bitset<sizeB> bsetB) {
return std::bitset<sizeAB>(bsetA.to_string() + bsetB.to_string());
}
// Here you should provide integer constants instead of type
template
std::bitset<32> join2<16,16,32>(std::bitset<16> bsetA, std::bitset<16> bsetB);
//
// main.cc
//
#include "bit_tools.h"
int main() {
std::bitset<16> bsetA;
std::bitset<16> bsetB;
join2<16,16,32>(bsetA, bsetB);
}