// { dg-do run } // Test that binfos aren't erroneously shared between instantiations. class PK_CryptoSystem { }; class PK_Encryptor : public virtual PK_CryptoSystem { }; class PK_FixedLengthCryptoSystem : public virtual PK_CryptoSystem { public: virtual unsigned int CipherTextLength() const =0; }; class PK_FixedLengthEncryptor : public virtual PK_Encryptor, public virtual PK_FixedLengthCryptoSystem { }; class PK_SignatureSystem { public: virtual ~PK_SignatureSystem() {} }; class PK_Signer : public virtual PK_SignatureSystem { public: virtual void Sign() = 0; }; class PK_Verifier : public virtual PK_SignatureSystem { }; class PK_Precomputation { }; template class PK_WithPrecomputation : public T, public virtual PK_Precomputation { }; typedef PK_WithPrecomputation PKWPFLE; typedef PK_WithPrecomputation PKWPS; template class ECPublicKey : public PKWPFLE { public: unsigned int CipherTextLength() const { return 1; } EC ec; }; template class ECPrivateKey : public ECPublicKey, public PKWPS { void Sign() {} int d; }; template class ECKEP : public ECPrivateKey { }; class GF2NT : public PK_CryptoSystem { int t1; }; class EC2N : public PK_CryptoSystem { GF2NT field; int a; }; template class ECKEP; template class ECKEP; int main () { ECKEP foo; return 0; }