2016-10-24 6 views
5

標準によると、std::vector<bool>にはメンバー機能がありませんdata()。ただし、次のスニペットは、のlibstdC++と最新のGCCでコンパイル罰金:我々は結果を使用しようとするとlibstdC++のstd :: vector <bool> :: dataは何をしますか?

#include <vector> 

int main() { 
    std::vector<bool> v; 
    v.data(); 
} 

、それは戻り値の型がvoidで判明します。

これはgccの拡張機能ですか、バグですか?
前者が真の場合はどうなりますか?

+2

私は詐欺に同意しません。私は標準が問題の関数を定義していないことを知っています、私は特定の実装の動作について尋ねています。 –

+2

ソースコードを読んだことがありますか? GCCはオープンソースです。 –

+0

@LightnessRacesinOrbit私は認めなかった。それが助けになったように見えます。 :) –

答えて

10

/usr/include/c++/4.8/bits/stl_bvector.hがあります:/usr/include/c++/4.8/debug/vector

// _GLIBCXX_RESOLVE_LIB_DEFECTS 
// DR 464. Suggestion for new member functions in standard containers. 
// N.B. DR 464 says nothing about vector<bool> but we need something 
// here due to the way we are implementing DR 464 in the debug-mode 
// vector class. 
void 
data() _GLIBCXX_NOEXCEPT { } 

を私は宣言を参照してください。

using _Base::data; 

だから、理由のようだ:std::vector<bool>::dataが存在していない限り、std::vector<bool>のデバッグバージョンは、コンパイルされないでしょう。

+0

[関連するリンク先](https://gcc.gnu.org/onlinedocs/libstdc++/ext/lwg-defects.html#464)を参照してください。 –

+1

悲しい。パックされたバッファへのポインタを返すと便利です。なぜそれは 'プライベート'にしないのですか? – Yakk

関連する問題