Abstract. Toda [24] proved in 1989 that the (discrete) polynomial time hierarchy, PH, is contained in the class P #P , namely the class of languages that can be decided by a Turing machine in polynomial time given access to an oracle with the power to compute a function in the counting complexity class #P. This result which illustrates the power of counting is considered to be a seminal result in computational complexity theory. An analogous result (with a compactness hypothesis) in the complexity theory over the reals (in the sense of Blum-Shub-Smale real machines [4]) was proved in [2]. Unlike Toda's proof in the discrete case, which relied on sophisticated combinatorial arguments, the proof in [2] is topological in nature in which the properties of the topological join is used in a fundamental way. However, the constructions used in [2] were semi-algebraic -they used real inequalities in an essential way and as such do not extend to the complex case. In this paper, we extend the techniques developed in [2] to the complex projective case. A key role is played by the complex join of quasi-projective complex varieties. As a consequence we obtain a complex analogue of Toda's theorem. The results contained in this paper, taken together with those contained in [2], illustrate the central role of the Poincaré polynomial in algorithmic algebraic geometry, as well as, in computational complexity theory over the complex and real numbers -namely, the ability to compute it efficiently enables one to decide in polynomial time all languages in the (compact) polynomial hierarchy over the appropriate field.