[Bug c++/71875] New: template specialization compile error
liweifriends at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Jul 14 09:16:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71875
Bug ID: 71875
Summary: template specialization compile error
Product: gcc
Version: 6.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: liweifriends at gmail dot com
Target Milestone: ---
Created attachment 38899
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38899&action=edit
the code
The code is as follows:
template <typename T>
constexpr bool IsMatrix = false;
// matrices
template<typename TElem>
class Matrix {};
template <typename TElem>
constexpr bool IsMatrix<Matrix<TElem>> = true;
// Row-vector expanded matrix
template<typename TNestVec>
class RowVecExpMatrix;
template <typename TNestVec>
constexpr bool IsMatrix<RowVecExpMatrix<TNestVec>> = true;
int main()
{
static_assert(IsMatrix<RowVecExpMatrix<Matrix<int>>>, "Matrix check
error");
static_assert(IsMatrix<Matrix<int>>, "Input type is not a matrix");
}
The Compile command is as follows:
g++ --std=c++14 ./main.cpp
When using gcc 5.4.0 or 6.1.1, the compiler complains as follows:
Error: symbol `_ZL8IsMatrix' is already defined
When using gcc 5.2 or 5.3, the code can be compiled with no error output.
More information about the Gcc-bugs
mailing list